0

rh358 002 fact变量获取 ansible配置网络 service_facts - supermao12

 1 year ago
source link: https://www.cnblogs.com/supermao12/p/16633439.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

rh358 002 fact变量获取 ansible配置网络 service_facts

通过ansible 获取网络信息

1.如何获取fact事实变量

ansible servera -m  servera
[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去掉

2415164-20220828153854698-264242209.png

如图我去掉了一级key ansible_all_ipv4_addresses的ansible
一级key都是以ansible打头

取value为列表的值
索引取值

2415164-20220828154623890-1006257463.png

循环取值

2415164-20220828154944082-861870577.png

取value为字典的值

2415164-20220828155618502-189300541.png

取一个深层级深的

2415164-20220828155932427-1248698686.png

只要不是ansible开头的一级key,那么就一级一级网上找。才可以

3.网络信息有关的事实变量

4.如何通过MAC地址来获取对应的网卡名称

例子:[我是mac地址 52:54:00:00:fa:09:已知条件 --> 属于这个mac的网卡名称

ansible_facts['nic_name']['macaddress']
通过mac得到name
ansible_facts['interfaces'] --> 能获取到所有的网卡名称,如果把所有的MAC取出,和已知Mac做对比就行

实践

2415164-20220828161045758-1080681126.png

报错因为网卡lo没有mac,无lo,为空值

2415164-20220828161646110-2039267697.png

得学会对value列表做循环并判断

5.在一个task内定义的变量,是否可以在下一个task调用

2415164-20220828162416739-571188090.png

可以看到变量的作用域被限制

2415164-20220828163818740-1971020723.png
2415164-20220828163839874-1341054670.png

可以看到fact定义的变量未被限制

练习题
1:确认networkmanger服务是否开启
2:获取特定MAC的网卡接口
3:设置这个MAC的网络
4:通过Ansible_facts获取ip和Mac地址

2415164-20220828170956243-1163194144.png
2415164-20220828171047448-1650201022.png

前两步

[root@workstation ansible]# yum -y install rhel-system-roles.network
[root@workstation roles]# cd rhel-system-roles.network/
[root@workstation rhel-system-roles.network]# ls
defaults  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]# 
2415164-20220828173517426-1553918582.png

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   

很明显角色先开始跑,后面才跑了任务,但是我任务里有一个检查服务。这个得先执行

2415164-20220828174800416-952548315.png

pre_tasks改变优先级

也可以在tasks内导入角色
导入角色的方式有两种
import_role 运行前 运行role
include_role 运行后 运行role

2415164-20220828175855176-468982775.png

上面两次方式改变了顺序
默认先执行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

2415164-20220828183729514-78231412.png

查看sshd服务状态

举个牵强的例子使用serice_facts的变量

2415164-20220828184341796-1390183543.png

service_facts: 用来收集系统当前所有的服务状态
并设置为ansible_facts['service']


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK