Ansible-playbook的优化

本文介绍了如何在大型项目中优化Ansible-playbook的使用,包括引用主机清单、管理动态清单和配置并行。动态清单有助于在大规模环境中更方便地管理主机,而通过调整forks参数可以优化并发执行。此外,文章还探讨了如何利用serial参数处理通知处理器和任务失败的情况,并展示了如何在playbook中包含和导入任务。
摘要由CSDN通过智能技术生成

管理大项目

引用主机清单

在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

执行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]$ 

所以在引用主机清单时,一定要注意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]

管理动态清单

从我们学习到现在为止,我们使用最多的就是静态主机清单,我们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主机组下的成员
        "hosts": [
            "node2"
        ]
    },
    "ungrouped": {                      //ungrouped主机组就是不属于任何主机组
        "hosts": [                        的主机的
            "node1"
        ]
    },
    "webserver": {
        "children": [
            "net"
        ]
    }
}
[student@ansible ansible]$ 

例子
我们去下载一个动态的主机清单,然后做一个测试,测试下载下来的动态的主机清单能否使用?

[student@ansible ansi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值