魔法变量

Ansible默认会提供一些内置的变量以实现一些特定的功能,称之为魔法变量

1. hostvars
2. inventory_hostname
3. group_names
4. groups
5. play_hosts
6. inventory_dir
7. inventory_file

一、hostvars

用于获取某台受管节点的相关变量,通过hostvars来指定受管节点和需要获取的信息,并将这整个语句作为一个变量

基本格式
"{{ hostvars['受管节点'].ansible_该节点网卡名称.ipv4.address }}"

可以使用debug模块输出hostvars

   - debug:
       var: hostvars
   - debug:
       var: hostvars.ansible2.ansible_facts.fqdn
   - debug:
       var: hostvars['ansible2'].ansible_facts.fqdn
   - debug:
       var: hostvars['ansible2'].ansible_facts.hostname
   - debug:
       var: hostvars['ansible2'].ansible_ens33.ipv4.address

注意:

1、  ['']  的用法和  .  的用法一样
2、  ansible2不能使用ip地址来取代,只能使用主机名或别名    

 

二、inventory_hostname

用来识别正在运行的管理节点的主机名,若在inventory中定义过别名那么会识别别名,若是IP就会识别IP,其中若是别名较长,使用inventory_hostname_short可以只获取最前一个域

   - debug:
       var: inventory_hostname
   - debug:
       var: inventory_hostname_short

三、group_names

用于标识当前正在执行task的目标主机位于的主机组

   - debug:
       var: group_names

四、groups

识别inventory文件中所有主机组,并且可以枚举出其中的所有主机

   - debug:
       var: groups

TASK [debug] *******************************************************************
ok: [ansible2] => {
    "groups": {
        "all": [
            "ansible3", 
            "ansible2"
        ], 
        "ungrouped": [], 
        "web1": [
            "ansible2"
        ], 
        "web2": [
            "ansible3"
        ], 
        "web3": [
            "ansible2", 
            "ansible3"
        ]
    }
}

五、play_hosts

当前的playbook将在哪些节点上运行

   - debug:
       var: play_hosts

六、inventory_dir

主机清单所在的目录

   - debug:
       var: inventory_dir

七、inventory_file

哪个是主机清单文件

   - debug:
       var: inventory_file