ansible 中 hostvars, groups, group_names, inventory_hostname 等变量

版本:ansible2.7

无论您是否定义了任何变量,您都可以使用Ansible提供的特殊变量(包括“magic”变量、事实和连接变量)访问有关主机的信息。magic变量名是保留的,不要用这些名称设置变量。

最常用的magic变量是hostvars、groups、group_names和inventory_hostname。

1、hostvars:获取某台指定的主机的相关变量。如果有一台web服务器的配置文件中需要指定db服务器的ip地址,我们假定这台db服务器的hostname为 db.example.com ip地址绑定在eth0网卡上,我们可以通过如下方法在web服务器上调用db服务器的ip地址:

{{ hostvars['db.example.com'].ansible_eth0.ipv4.address }}

需要注意的是db.example.com不能使用ip地址来取代,只能使用主机名或别名。

2、groups : 资产文件中的组和主机
3、group_names :用于标识当前正在执行task的目标主机位于的=组
4、inventory_hostname:是指inventory资产文件中的主机的名称,常用来修改主机名与资产文件中一致

- name: configuire system hostname
  hostname:
    name: "{{ inventory_hostname }}
  become: yes 

5、inventory_hostname与ansible_host的区别
ansible_hostname是ansible收集的变量,为主机的hostname

ansible hostname -m setup

6、变量优先级:
1、extra vars(命令中-e)最优先
2、inventory 主机清单中连接变量(ansible_ssh_user 等)
3、play 中 vars、vars_files 等
4、剩余的在 inventory 中定义的变量
5、系统的 facts 变量
6、角色定义的默认变量(roles/rolesname/defaults/main.yml)
注:子组会覆盖父组,主机总是覆盖组定义的变量

参考文章:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
https://gist.github.com/andreicristianpetcu/b892338de279af9dac067891579cad7d

你可能感兴趣的:(运维,linux,ansible)