魔法变量
Ansible默认会提供一些内置的变量以实现一些特定的功能,我们称之为魔法变量。下面列举一些常用的魔法变量。
1. hostvars
获取某台指定的主机的相关变量。如果有一台web服务器的配置文件中需要指定db服务器的ip地址,我们假定这台db服务器的hostname为db.exmaple.com,ip地址绑定在eth0网卡上,我们可以通过如下方法在web服务器上调用db服务器的ip地址:
1 | {{ hostvars['db.example.com'].ansible_eth0.ipv4.address }} |
需要注意的是db.example.com不能使用ip地址来取代,只能使用主机名或别名。
2. inventory_hostname
inventory_hostname是Ansible所识别的当前正在运行task的主机的主机名。如果在inventory里定义过别名,那么这里就是那个别名,如果inventory包含如下一行:
1 | server1 ansible_ssh_host=192.168.1.1 |
则inventory_hostname即为server1
利用hostvars和inventory_hostname变量,可以输出与当前主机相关联的所有变量:
1 | - debug: var=hostvars[inventory_hostname] |
与inventory_hostname相近的还有一个inventory_hostname_short,如果一台主机的inventory_hostname为server1.exmaple.com,则inventory_hostname_short的值为server1
3. group_names
用于标识当前正在执行task的目标主机位于的主机组。假如我们有三台主机,用来配置成一主二从的mysql服务器。inventory配置如下:
1 | [] |
mysql配置文件my.conf.j2示例如下:
1 | #我们知道db1在mdb组,当db1与当前正在执行任务的主机位于同一组时,我们认为当前主机即在mdb组,所以对当前主机应用mysql master的配置 |
我们执行如下task:
1 | - name: copy config file to mysql master |
4. groups
groups是inventory中所有主机组的列表,可用于枚举主机组中的所有主机。
假如我们有一个inventory文件定义如下:
1 | [] |
在配置一台HAproxy的负载均衡器时,我们的配置文件肯定需要web主机组的所有服务器的IP,配置文件包含如下片段:
1 | backend web-backend |
最终生成的文件如下:
1 | backend web-backend |
再给一个例子,在所有的dbservers组的服务器上创建一个数据库用户kate:
1 | - name: Create a user for all db servers |
5. play_hosts
当前playbook会在哪些hosts上运行
6. inventory_dir
主机清单所在目录
7. inventory_file
主机清单文件