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]#