首页 > 技术文章 > Ansible系列基础篇 1.4、Inventory配置

wsongl 2020-09-10 23:59 原文

 一、定义主机和组

# 定义主机,IP
192.168.12.4

# 定义主机,主机名
ali-hostname-server

# 定义主机,主机名:端口(默认端口22)
# 主机信息需要加入~/.ssh/known_hosts
ali-hostname-web-server
ali-hostname-web-server:2222

# 定义分组
[group01]
192.168.0.1
192.168.0.2

# 定义范围主机
[group02]
192.168.[0:9].2   # 表示0到9之间所有数字(包括0和9)
app-[b:f].xx.com  # 表示b到f之间所有字母(包括b和f)

 

二、定义主机变量、主机组变量

# 定义主机变量
[group03]
192.168.0.3 http_port=8080 maxRequests=800  # 设置了两个变量http_port maxRequests

# 定义组变量
[group04]
192.168.0.4
192.168.0.5
[group04:vars] tomcat_port=8080 jmx_port=18090

 

三、定义组嵌套

# 定义组嵌套组,及变量传递
# 组中嵌套组,设置的变量只能在ansible-playbook中使用,ansible命令是不支持的
[group05]
192.168.0.6
[group06]
192.168.0.7

[group07:children]
group05
group06

[group07:vars]
tomcat_port=8080

 

四、Ansible变量存储方式

1. Inventory配置文件(默认/etc/ansible/hosts)
2. Playbook中vars定义的区域
3. Roles中vars目录下的文件
4. 主机变量文件(/etc/ansible/hosts)同级目录group_vars和hosts_vars目录下的文件
   /etc/ansible/group_vars/{{组名命名的文件}}
   /etc/ansible/host_vars/{{主机命名的文件}}
   # 我们还可以在group_vars host_vars两个目录下定义all文件,来一次性的为所有的主机组和主机定义变量
建议:为了方便变量的读取,设置变量时,尽量沿用同一种方式,以便维护人员管理.

 

五、Ansible系统变量

ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
      默认的 ssh 用户名
ansible_ssh_pass  ansible_password
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python27).
      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

注意:从ansible2.0开始, ansible_ssh_user, ansible_ssh_host, ansible_ssh_port已经改变为ansible_user, ansible_host, ansible_port

具体参考官网http://docs.ansible.com/ansible/latest/intro_inventory.html

 

 六、正则匹配

# 全量匹配
ansible all -m ping
ansible "*" -m ping
ansible 192.168.1.* -m ping

# 逻辑或(or),多台主机或多个组同时执行
ansible "web1:web2" -m ping
ansible 192.168.80.128:192.168.80.129 -m ping

# 逻辑非(!),多重条件的匹配
# 所有在webservers组,但不在phoenix组的主机
ansible "webservers:!phoenix" -m ping

# 逻辑与(&)
# 同时在webservers组、phoenix组的主机
ansible "webservers:&phoenix" -m ping

# 组合逻辑
# webservers和dbservers两个组中的所有主机,并且在staging组,不在phoenix组的主机
ansible "webservers:dbservers:&staging:!phoenix" -m ping

# 模糊匹配
# 所有以.maxedu.com结尾的主机
ansible "*.maxedu..com" -m ping
# one开头,.com结尾的所有主机和dbservers组中的主机
ansible "one*.com:dbservers" -m ping

# 切割数组
[group08]
host01
host02
host03

ansible group08[0] -m ping    # host01
ansible group08[0:1] -m ping  # host01,host02

# 正则匹配,"~"开始表示正则匹配
ansible ~(web|db).*\.example\.com -m ping

  

 

推荐阅读