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


    通过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得到name
    ansible_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]# 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]# 
    


    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 运行前 运行role
    include_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']

  • 相关阅读:
    2. zk集群部署
    Redis 非关系型数据库 配置与优化
    C语言:结构体
    ThreadLocal
    零代码编程:用ChatGPT批量提取flash动画swf文件中的mp3
    文举论金:黄金原油全面走势分析策略指导。
    动手学深度学习—批量规范化(代码详解)
    论文笔记:Large Language Model for Participatory Urban Planning
    Node.js学习记录
    都闪开,这才是最牛x技术搜索引擎【云原生】
  • 原文地址:https://www.cnblogs.com/supermao12/p/16633439.html