管理配置文件
ansible的配置文件叫ansible.cfg, 默认位于/etc/ansible/ansible.cfg 。此文件定义了连接受管主机的方法、权限以及受管主机清单文件等信息
1.ansible.cfg的读取顺序
ansible.cfg可能会位于多个地方,ansible会在以下位置按顺序读取ansible.cfg文件:
使用-c 或--config 指定配置文件的路径
使用环境变量ANSIBLE_CONFIG
当前目录下的ansible.cfg文件
当前用户家目录下的ansible.cfg文件
默认配置文件/etc/ansible/ansible.cfg
可以使用 ansible --version 查看当前所使用的配置文件
[greg@control ansible]$ ansible --version
ansible 2.8.0
config file = /home/greg/ansible/ansible.cfg
configured module search path = ['/home/greg/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Apr 3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
2.ansible.cfg参数配置
ansible.cfg使用分段式配置,每个段使用"[ ]"包含,每个段下方使用key=value方式定义ansible工作方式。主要的配置段有[defaults]和[privilege_escalation]
[defaults] 用来定义通用默认配置
[privilege_escalation] 用于定义在受管主机上的提权配置
[defaults]中的配置参数
inventory = /etc/ansible/hosts
定义inventory主机清单文件的位置,默认清单文件是/etc/ansible/hosts
forks = 5
与受管主机通信时的并行的进程数,默认是5
remote_user = root
设置受管主机的用户,默认是root,如果未设置则是以控制节点当前用户身份
ask_pass = True
在连接受管主机是是否要输入密码,默认是需要的。配置好SSH公钥认证则可以自动连接,无需密码。
[privilege_escalation]中的配置参数
become=True 在受管主机是否进行提权
become_method=sudo 提权方式为sudo ,默认是su
become_user=root 提权后的用户
become_ask_pass=False 提权时是否需要密码
[defaults]
inventory = /home/greg/ansible/inventory
remote_user = greg
roles_path = /home/greg/ansible/roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
3.inventory主机清单文件
inventory文件位置是在ansible.cfg中定义的inventory文件就是受管主机的清单,定义了哪些主机将被ansible管理。这些主机列表可以进行分组,也可以使用变量来定义主机和主机组。
inventory 文件的内置变量
ansible_ssh_host # 要连接的主机名
ansible_ssh_port # 端口号,默认22
ansible_ssh_user # ssh连接时默认使用的用户名
ansible_ssh_pass # ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_ssh_private_key_file # 秘钥文件如果不想使用sshagent管理时可以使用此选项
ansible_shell_type # shell类型,默认sh
ansible_connection # SSH连接类型:local、ssh、paramiko
在ansible 1.2之前默认paramiko
ansible_python_interpreter # 用来指定Python解释器的路径,同样可以指定
ruby、Perl的路径
可以写主机名或ip地址:
192.168.10.12
node1.example.com
node2.example.com
指定主机范围:
192.168.10.[11:20] 表示192.168.10.11-192.168.10.20 的主机
192.168.[0:3].[1:254] 表示192.168.0.1-192.168.3.254网络内的主机
node[1:30].example.com 表示node1.example.comnode30.example.com网络内的主机
定义主机组:
可以使用分组的方法来指定受管主机,这样就可以针对具体的组来执行
ansible指令。
- 一个主机可以属于多个组
- 组可以嵌套
- 组使用[]来定义
[dev]
node1
[test]
node2
[prod]
node3
node4
[balancers]
node5
#嵌套组:
用一个大的组来包含多个其他组,使用":children" 来表示组嵌套
[webservers:children]
prod
在inventory中默认就存在两个组,分别是all和ungrouped
all: 表示inventory中的所有主机
ungrouped: 表示不在任何组中的主机
列出inventory中的主机
列出所有的主机
[greg@control ansible]$ ansible all --list-hosts
hosts (5):
node1
node2
node5
node3
node4
列出prod组中的主机
[greg@control ansible]$ ansible prod --list-hosts
hosts (2):
node3
node4
列出dev组中的主机
[greg@control ansible]$ ansible dev --list-hosts
hosts (1):
node1