主机清单-inventory
查看ansible里的安装文件
代码语言:txt复制[root@workstation ~]# rpm -ql ansible|less
/etc/ansible/ansible.cfg #默认ansible的默认配置文件位置
/etc/ansible/hosts #默认inventory主机清单位置
/etc/ansible/roles #默认inventory角色位置
/usr/bin/ansible #ansible命令的文件
/usr/lib/python2.7/site-packages/ansible #提供Python模块
/usr/share/man/man1/ #帮助文档
简介
- inventory是一个被管理主机的一个清单文件。
- inventory里可以有单个主机,也可以有多个主机加起来的主机组。
- inventory有静态的也有动态的
静态inventory
单个主机
可以是ip地址,也可以是域名
代码语言:txt复制[student@workstation ansible]$ cat inventory
servera
192.168.1.100
192.168.1.123
主机组
格式
代码语言:txt复制[组名]
主机1
主机2
主机3
...
示例
代码语言:txt复制[student@workstation ansible]$ cat inventory
localhost
[web-server]
servera
serverb
[balancer]
serverc
[data-server]
serverd
列出主机
all:代表所有主机
代码语言:txt复制[student@workstation ansible]$ ansible -i inventory --list-hosts all
hosts (5):
localhost
serverc
servera
serverb
serverd
ungrouped:未分组主机
代码语言:txt复制[student@workstation ansible]$ ansible -i inventory --list-hosts ungrouped
hosts (1):
localhost
嵌套组
格式
代码语言:txt复制[组名:children]
组名1
组名2
示例
同一个(主机/组)可以出现在多个组中
代码语言:txt复制[student@workstation ansible]$ cat inventory
localhost
[web-server]
servera
serverb
[balancer]
serverc
[data-server]
serverd
[webs:children]
web-server
data-server
[bakend:children]
balancer
webs
列出主机
代码语言:txt复制[student@workstation ansible]$ ansible -i inventory --list-hosts webs
hosts (3):
servera
serverb
serverd
[student@workstation ansible]$ ansible -i inventory --list-hosts bakend
hosts (4):
serverc
servera
serverb
serverd
简化表达式
格式
代码语言:txt复制[start:end]
示例
192.168.1.1:100 | 代表192.168.1.1-192.168.1.100 |
---|---|
192.168.10:20.1:254 | 代表192.168.10.1-192.168.20.254 |
server01:20.domain.com | 代表01,02,03...20 |
a:c.domain.com | 代表a,b,c |
[student@workstation ansible]$ cat inventory
192.168.1.[1:100]
192.168.[10:20].[1:254]
[server]
server[01:20].domain.com
[mydomain]
[a:c].domain.com
列出主机
代码语言:txt复制[student@workstation ansible]$ ansible -i inventory --list-hosts '192.168.12.25*'
hosts (6):
192.168.12.25
192.168.12.250
192.168.12.251
192.168.12.252
192.168.12.253
192.168.12.254
[student@workstation ansible]$ ansible -i inventory --list-hosts server12.domain.com
hosts (1):
server12.domain.com
[student@workstation ansible]$ ansible -i inventory --list-hosts mydomain
hosts (3):
a.domain.com
b.domain.com
c.domain.com
模糊匹配
通配符在Ansible表示0个或多个任意字符,主要应用于一些模糊规则匹配。
*匹配
匹配所有主机,all或*号功能相同。如检测所有主机存活情况。
代码语言:txt复制ansible all --list-hosts
ansible '*' --list-hosts
ansible '172.25.0.*' --list-hosts
ansible 'server*' --list-hosts
逻辑或匹配
如我们希望同时对多台主机或多个组同时执行,相互之间用:
(冒号)或者,
逗号分隔即可。
ansible 'servera,prod' --list-host
ansible 'ba*,prod' --list-host
逻辑与(&)匹配
逻辑与都匹配到的才执行。
代码语言:txt复制ansible 'ser*,&prod' --list-hosts
逻辑非匹配
逻辑非用感叹号(!)表示,主要针对多重条件的匹配规则,使用方式如下:
代码语言:txt复制ansible 'web*,!prod' --list-hosts
多条件组合
代码语言:txt复制 ansible 'server*,&prod,!ba' --list-host
正则匹配
Ansible同样完整支持正则匹配功能,~开始表示正则匹配。
代码语言:txt复制ansible '~server(a|b)' --list-host
使用正则检测 www.example.com
、new.example.com
、blog.example.com
的存活
ansible "~(www|new|blog).example.(com|org)" --list-hosts
Ansible配置文件
ansible配置文件默认位置:/etc/ansible/ansible.cfg
配置选项
查看ansible.cfg的配置项
代码语言:txt复制[student@workstation ansible]$ grep "^[" /etc/ansible/ansible.cfg
[defaults]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
常用两个选项解读
代码语言:txt复制[defaults]
inventory = /home/student/ansible/inventory #主机清单文件的位置
roles_path = /home/student/ansible/roles #角色路径
remote_user = devops #远程执行用户
ask_pass = Flase #是否询问密码
forks = 5 #并发数
sudo_user = root #切换root用户
ask_sudo_pass = True #询问是否需要密码
[privilege_escalation]
become=True #是否提权
become_method=sudo #提权方式
become_user=root #默认提权的用户
become_ask_pass=False #提权是否需要密码
官网配置参考
配置注释
# | 注释风格1 |
---|---|
; | 注释风格2 |
配置文件优先级
1 | $ANSIBLE_CONFIG | 环境变量 |
---|---|---|
2 | ./ansible.cfg | 当前目录 |
3 | ~/.ansible.cfg | 用户家目录 |
4 | /etc/ansible/ansible.cfg | 默认配置 |
4.默认配置
代码语言:txt复制[student@workstation /]$ ansible --version|grep "config file"
config file = /etc/ansible/ansible.cfg
3.用户家目录
代码语言:txt复制[student@workstation /]$ touch /home/student/.ansible.cfg
[student@workstation /]$ ansible --version|grep "config file"
config file = /home/student/.ansible.cfg
2.当前目录
代码语言:txt复制[student@workstation lala]$ pwd
/tmp/lala
[student@workstation lala]$ ansible --version|grep "config file"
config file = /tmp/lala/ansible.cfg
1.环境变量
代码语言:txt复制[student@workstation lala]$ export ANSIBLE_CONFIG=/opt/ansible.cfg
[student@workstation lala]$ echo $ANSIBLE_CONFIG
/opt/ansible.cfg
[student@workstation lala]$ sudo touch /opt/ansible.cfg
[student@workstation lala]$ ansible --version | grep "config file"
ansible 2.3.1.0
config file = /opt/ansible.cfg
ad-hoc
简介
ad hoc 指的临时意思,就像在命令行写的shell命令就是临时命令,在文件中写的shell命令就是脚本
ad hoc 就是在命令行直接执行的内容
语法
ansible host-pattern -m 模块 -a ‘模块参数’
host-pattern是inventory中定义的主机或主机组,可以使用“.”或“*”或“:”等特殊字符的匹配型字符串,host-pattern是必须项,不可忽略。
模块
位置
Ansible模块存放位置:/usr/lib/python2.7/site-packages/ansible/modules。
官网模块描述信息
官网模块分类信息
帮助
ansible-doc -l 查看列表
ansible-doc modulename 查看模块帮助文件
维护
ansible-doc文档中METADATA描述了谁在维护该模块,status记录了模块开发状态。
supported_by | 记录了哪些社区在维护该模块 |
---|---|
core | Ansible核心开发人员维护 |
curated | 社区的合作伙伴维护。curated模块需要Ansible社区审核才能提交变更。伴随ansible core模块一并打包 |
community | 由其他开源社区维护,Ansible核心开发人员和合作伙伴不提供支持,伴随ansible core模块一并打包 |
详细信息参考
如果想实现自定义功能,可以自己编写模块;Ansible会从变量ANSIBLE_LIBRARY中查找模块。
如果该变量未设置,将会从ansible.cfg配置文件library=设置的位置查找模块;ansible命令也会在./library位置查找模块。
更多的信息参考
下一节将具体介绍更多的模块使用方法