absible管理大项目

本文详细介绍了如何使用Ansible管理大项目,包括引用主机清单的注意事项,如需确保playbook中的hosts与主机清单一致;动态主机清单的使用,适合大规模环境以实现高效管理;以及配置并行,通过forks参数控制并发连接数以优化执行效率。此外,还讨论了如何处理主机失败情况下的handlers和如何通过serial参数确保有序执行。
摘要由CSDN通过智能技术生成

ansible管理大项目


一、引用主机清单

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

vim /etc/ansible/hosts
node1
node2

vim a.yml
---
 - name: test 
  hosts: 192.168.56.179,node2.example.com
  tasks: 
- name: debug1
 debug: 
   msg:  wangyani

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

[root@server ansible]# ansible-playbook a.yml 
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.56.179
[WARNING]: Could not match supplied host pattern, ignoring: node2.example.com

PLAY [test] ********************************************************************
skipping: no hosts matched

PLAY RECAP *********************************************************************

[root@server 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格式输出清单。

Vim hosts
node1 myvars=aa

[net]
node2

[webserver:children]
net

我们可以通过ansible-inventory -i hosts --list 命令,将主机清单以JSON的格式显示出来

[root@server 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"
        ]
    }
}
[root@server ansible]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值