rh358 002 fact变量获取 ansible配置网络 service
2022-09-10 21:34:50 2022-09-10 37 0
通过ansible 获取网络信息
1.如何获取fact事实变量
方式1:
ansible servera -m servera
方式2:
剧本
[root@workstation ansible]# cat ake.yaml ---- name: get all facts hosts: servera tasks: - name: get all facts debug: msg: "{{ ansible_facts }}"[root@workstation ansible]# ansible-playbook ake.yaml
2.如何获取某个具体的事实变量
比如:获取fqdn或者Hostname。得分析变量类型
变量类型1>list list=[1,2,3,4,5]2>dict dict={'a':1,'b':2}3>set 集合4>tuple 元组5>string 字符串有嵌套类型ansible_facts={"ansible_all_ipv4_addresses": ['xxx','xxxx'],"a":3}字典的值是列表。各种嵌套可以通过格式观察 ansible_facts的一级别的key:对应的value如果是列表[1,2,3,4,5],这样的值可以用来循环 ansible_facts的第一级key:对应的value如果是个字典,获取的方式就是ansible_facts['key1_name']获取
如果一级key以ansible开头,需要把ansible去掉
如图我去掉了一级key ansible_all_ipv4_addresses的ansible
一级key都是以ansible打头取value为列表的值
索引取值循环取值
取value为字典的值
取一个深层级深的
只要不是ansible开头的一级key,那么就一级一级网上找。才可以
3.网络信息有关的事实变量
很简单
4.如何通过MAC地址来获取对应的网卡名称
例子:[我是mac地址 52:54:00:00:fa:09:已知条件 --> 属于这个mac的网卡名称
ansible_facts['nic_name']['macaddress']
通过mac得到nameansible_facts['interfaces'] --> 能获取到所有的网卡名称,如果把所有的MAC取出,和已知Mac做对比就行实践
报错因为网卡lo没有mac,无lo,为空值得学会对value列表做循环并判断
5.在一个task内定义的变量,是否可以在下一个task调用
可以看到变量的作用域被限制
可以看到fact定义的变量未被限制练习题
1:确认networkmanger服务是否开启2:获取特定MAC的网卡接口3:设置这个MAC的网络4:通过Ansible_facts获取ip和Mac地址前两步引用角色
[root@workstation ansible]# yum -y install rhel-system-roles.network[root@workstation roles]# cd rhel-system-roles.network/[root@workstation rhel-system-roles.network]# lsdefaults library LICENSE meta module_utils pylintrc README.html README.md tasks tests tox.ini[root@workstation rhel-system-roles.network]# pwd/usr/share/ansible/roles/rhel-system-roles.network[root@workstation rhel-system-roles.network]#
become可以提权,普通用户无法改网卡使用红帽的role角色,可以查看readme[root@workstation ansible]# ansible-playbook playbook.yaml PLAY [network] **************************************************************************************************************************************************************************************************TASK [Gathering Facts] ******************************************************************************************************************************************************************************************ok: [servera]TASK [rhel-system-roles.network : Check which services are running] *********************************************************************************************************************************************ok: [servera]TASK [rhel-system-roles.network : Check which packages are installed] *******************************************************************************************************************************************ok: [servera]TASK [rhel-system-roles.network : Print network provider] *******************************************************************************************************************************************************ok: [servera] => { "msg": "Using network provider: nm"}TASK [rhel-system-roles.network : Install packages] *************************************************************************************************************************************************************skipping: [servera]TASK [rhel-system-roles.network : Enable and start NetworkManager] **********************************************************************************************************************************************ok: [servera]TASK [rhel-system-roles.network : Enable network service] *******************************************************************************************************************************************************skipping: [servera]TASK [rhel-system-roles.network : Ensure initscripts network file dependency is present] ************************************************************************************************************************skipping: [servera]TASK [rhel-system-roles.network : Configure networking connection profiles] *************************************************************************************************************************************[WARNING]: [003] <info> #0, state:up persistent_state:present, 'eth1': add connection eth1, 1e60e42a-10e8-4a27-ba92-c5698ae322c1[WARNING]: [004] <info> #0, state:up persistent_state:present, 'eth1': up connection eth1, 1e60e42a-10e8-4a27-ba92-c5698ae322c1 (not-active)changed: [servera]TASK [rhel-system-roles.network : Re-test connectivity] *********************************************************************************************************************************************************ok: [servera]TASK [confirm Networkmanager service] ***************************************************************************************************************************************************************************ok: [servera]TASK [get interface name] ***************************************************************************************************************************************************************************************skipping: [servera] => (item=lo) ok: [servera] => (item=eth1)skipping: [servera] => (item=eth0) skipping: [servera] => (item=eth2) TASK [debug net_name] *******************************************************************************************************************************************************************************************ok: [servera] => { "msg": "eth1"}PLAY RECAP ******************************************************************************************************************************************************************************************************servera : ok=10 changed=1 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
很明显角色先开始跑,后面才跑了任务,但是我任务里有一个检查服务。这个得先执行
pre_tasks改变优先级也可以在tasks内导入角色
导入角色的方式有两种import_role 运行前 运行roleinclude_role 运行后 运行role上面两次方式改变了顺序
默认先执行role自动化服务管理
service模块
无法执行daemon-reload: yes[root@workstation ansible]# cat fox.yaml ---- name: network hosts: servera tasks: - name: abc service_facts: - name: print debug: msg: "{{ ansible_facts }}"
会使fact多出服务的信息
增加了事实变量,关于服务的手机服务状态,保存为ansible事实变量service_facts
查看sshd服务状态举个牵强的例子使用serice_facts的变量
service_facts: 用来收集系统当前所有的服务状态
并设置为ansible_facts['service']