• Ansible-playbook的优化


    管理大项目

    引用主机清单

    在playbook中引用hosts时,如果对应的主机清单中没有配置该主机,是无法执行的。
    如果主机清单中配置的是主机名称,那么在playbook中hosts字段后写的是ip或者主机名,那么也是无法执行的,示例如下

    [student@ansible ansible]$ vim /etc/ansible/hosts
    node1
    node2
    
    [student@ansible ansible]$ vim a.yml
    ---
     - name: test 
      hosts: 172.16.30.10,node2.example.com
      tasks: 
    - name: debug1
     debug: 
       msg:  haha
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行a.yml这个playbook的时候,你就会发现有问题了,直接跳过该任务,无法执行。

    [student@ansible ansible]$ ansible-playbook a.yml 
    [WARNING]: Could not match supplied host pattern, ignoring: 172.16.30.10
    [WARNING]: Could not match supplied host pattern, ignoring: node2.example.com
    
    PLAY [test] ********************************************************************
    skipping: no hosts matched
    
    PLAY RECAP *********************************************************************
    
    [student@ansible ansible]$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    所以在引用主机清单时,一定要注意playbook里面hosts字段后写的内容一定只能时主机清单里面编辑的内容。

    使用playbook引用主机清单的方式有很多种,如下

    Hosts: node1
    Hosts: node1.example.com
    Hosts: 172.16.30.10
    Hosts: all      ----所有的受控主机
    Hosts: net   ----主机组net
    Hosts: ‘*’  ----所有的主机
    Hosts: ‘*.example.com’   
    Hosts:  ‘172.16.30.*’  
    Hosts:  ‘web*’  ---通过匹配符*来匹配
    Hosts:  net:webserver    ----取net组和webserver组的并集
    Hosts:  net:&webserver   ---取交集
    Hosts:  net:!node1   ---net组所有的主机,但是除了node1
    Hosts: node[1-5]
    Hosts:  node[a-d]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    管理动态清单

    从我们学习到现在为止,我们使用最多的就是静态主机清单,我们ansible也支持动态的主机清单。在什么时候我们才会用到动态的主机清单呢?
    比如说,我们受控主机比较少的情况下,我们建议是使用静态主机清单的,但当我们处于一个大型的环境下,受控主机非常非常多的时候,而且受控主机更替非常快的时候,我们使用静态主机清单就很难来管理了,我们使用动态的主机清单更便于我们管理了。
    Ansible支持动态清单脚本,这些脚本在每当ansible执行时从这些类型的来源检索当前的信息,使清单能够实时得到更新。这些清单脚本是可执行的程序,能够从一些外部来源收集信息,并以JSON格式输出清单。

    [student@ansible ansible]$ vim hosts
    node1 myvars=aa
    
    [net]
    node2
    
    [webserver:children]
    net
    
    我们可以通过ansible-inventory  -i  hosts  --list 命令,将主机清单以JSON的格式显示出来
    [student@ansible ansible]$ ansible-inventory -i hosts --list
    {
        "_meta": {                           //_meta下记录着我们主机中是否定义变量
            "hostvars": {
                "node1": {
                    "myvars": "aa"
                }
            }
        },
        "all": {                              // all:列出我们所有的主机组,其中我们会
            "children": [                      发现我们并没有设置ungrouped主机组,这
                "ungrouped",                 里怎么会有ungrouped组呢?
                "webserver"                  这个ungrouped组是那些不属于任何主机组
            ]                                的主机。
        },
        "net": {                            //net主机组下的
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    Docker 搭建Redis 踩坑
    使用证书的方式登录linux 系统或者windows系统
    星宸科技SSC369G 双4K高性价比AI IPC方案
    Gartner 2022年顶级战略技术趋势报告
    Java、泛型快速排序
    Java培训:现实世界中的原生Java
    【Android】编译系统之 make 和 Soong
    Java初识:类和对象(上)
    cmake 命令
    SpringCloud-9-Eureka:搭建服务注册中心
  • 原文地址:https://blog.csdn.net/ZHJSXX/article/details/127649452