美文网首页
Ansible魔法变量

Ansible魔法变量

作者: Odven | 来源:发表于2020-08-31 17:23 被阅读0次

1. 魔法变量

1. hostvars
2. inventory_hostname
3. inventory_hostname_short
4. groups
5. group_names

2. Ansible默认会提供一些内置的变量以实现一些特定的功能,我们称之为魔法变量。下面列举一些常用的魔法变量。

1. hostvars
该变量用于引用其他主机上收集的facts中的数据,或者引用其他主机的主机变量、主机组变量。其key为主机名或主机组名。

举个例子,假如使用ansible部署一台php服务器host1,且配置文件内需要指向另一台数据库服务器host2的ip地址ip2,可以直接在配置文件中指定ip2,
但也可以在模板配置文件中直接引用host2收集的facts数据中的ansible_eth0.ipv4.address变量。
例如,centos7主机组中包含了192.168.100.[63:65]共3台主机。playbook内容如下:
---
- hosts: centos7
  tasks:
    - debug: msg="{{hostvars['192.168.100.63'].ansible_eth0.ipv4.address}}"

# 执行结果
TASK [debug] *********************************************************
ok: [192.168.100.63] => {
    "msg": "192.168.100.63"
}
ok: [192.168.100.64] => {
    "msg": "192.168.100.63"
}
ok: [192.168.100.65] => {
    "msg": "192.168.100.63"
}
但注意,在引用其他主机facts中数据时,要求被引用主机进行了facts收集动作,或者有facts缓存。否则都没收集,
当然无法引用其facts数据。也就是说,当被引用主机没有facts缓存时,ansible的控制节点中必须同时包含引用主机和被引用主机。

除了引用其他主机的facts数据,还可以引用其他主机的主机变量和主机组变量,
且不要求被引用主机有facts数据,因为主机变量和主机组变量是在ansible执行任务前加载的。
例如,inventory中格式如下:
192.168.100.59
[centos7]
192.168.100.63 var63=63
192.168.100.64
192.168.100.65
[centos7:vars]
var64=64

# playbook内容如下:
---
- hosts: 192.168.100.59
  tasks:
    - debug: msg="{{hostvars['192.168.100.63'].var63}} & {{hostvars['192.168.100.65'].var64}}"

# 执行结果
TASK [debug] ***************************************
ok: [192.168.100.59] => {
    "msg": "63 & 64"
}


2. inventory_hostname和inventory_hostname_short
分表代表的是inventory中被控节点的主机名和主机名的第一部分,如果定义的是主机别名,则变量的值也是别名。
例如inventory中centos7主机组定义为如下:
[centos7]
192.168.100.63
host1 ansible_ssh_host=192.168.100.64
www.host2.com ansible_ssh_host=192.168.100.65

分别输出它们的inventory_hostname和inventory_hostname_short。
shell> ansible centos7 -m debug -a 'msg="{{inventory_hostname}} & {{inventory_hostname_short}}"'
192.168.100.63 | SUCCESS => {
    "msg": "192.168.100.63 & 192"
}
host1 | SUCCESS => {
    "msg": "host1 & host1"
}
www.host2.com | SUCCESS => {
    "msg": "www.host2.com & www"
}



3. groups和group_names
group_names返回的是主机所属主机组,如果该主机在多个组中,则返回多个组,如果它不在组中,则返回ungrouped这个特殊组。
例如,某个inventory文件如下:
192.168.100.60
192.168.100.63
192.168.100.64
192.168.100.65
[centos6]
192.168.100.60
[centos7]
192.168.100.63
host1 ansible_ssh_host=192.168.100.64
www.host2.com ansible_ssh_host=192.168.100.65
[centos:children]
centos6
centos7

其中100.60定义在centos6和centos中,所以返回这两个组。同理100.63返回centos7和centos。100.64和100.65则返回ungrouped,虽然它们在centos7中都定义了别名,但至少将100.64和100.65作为主机名时,它们是不在任何主机中的。另一方面,host1和www.host2.com这两个别名主机都返回centos7和centos两个组。

groups变量则是返回其所在inventory文件中所有组和其内主机名。注意,该变量对每个控制节点都返回一次,所以返回的内容可能非常多。例如,上面的inventory中,如果指定被控节点为centos7,则会重复返回3次(因为有3台被控主机)该inventory文件。其中的第三台主机www.host2.com的返回结果为:
# 执行结果
www.host2.com | SUCCESS => {
"msg": {
    "all": [
        "192.168.100.60",
        "192.168.100.63",
        "192.168.100.64",
        "192.168.100.65",
        "host1",
        "www.host2.com"
    ],
    "centos": [
        "192.168.100.60",
        "192.168.100.63",
        "host1",
        "www.host2.com"
    ],
    "centos6": [
        "192.168.100.60"
    ],
    "centos7": [
        "192.168.100.63",
        "host1",
        "www.host2.com"
    ],
    "ungrouped": [
        "192.168.100.60",
        "192.168.100.63",
        "192.168.100.64",
        "192.168.100.65"
    ]
}
}

该文引荐于: https://www.bbsmax.com/A/ke5jmbxOJr/

相关文章

  • Ansible魔法变量

    1. 魔法变量 2. Ansible默认会提供一些内置的变量以实现一些特定的功能,我们称之为魔法变量。下面列举一些...

  • ansible-playbook 01 变量

    ansible 环境变量优先级 ansible 变量优先级 命令行指定变量 > yaml文件中的变量> 主机清单中...

  • 自定义ansible模块

    准备工作 # 创建ansible模块目录 mkdir /tmp/ansible #声明全局变量,设置ansible...

  • Ansible查找ansible.cfg文件的位置及顺序

    1、ANSIBLE_CONFIG环境变量所指定的文件 2、./ansible.cfg(当前目录下的ansible....

  • Ansible变量学习

    ansible变量的分类 资源清单中定义 /etc/ansible/group_vars/webservers定义...

  • ansible 模板中遍历字典

    需求: 从ansible_facts.ansible_devices变量中查找符合条件的磁盘 数据: templa...

  • Ansible-5 ansible变量

    变量命名规则 变量的名字由字母、下划线和数字组成,以字母开头。 保留关键字不能作为变量名称 变量类型 全局变量 E...

  • ansible failed_when的使用

    在正常使用了ansible剧本中的变量后,突然遇到需要在变量不符合的情况下,中断ansible的剧本。这时候就用到...

  • 四、Ansible 变量

    我们在PlayBook一节中,将PlayBook类比成了Linux中的shell。那么它作为一门Ansible特殊...

  • 03 Ansible 变量

    本文链接: https://www.jianshu.com/p/b348e7e5358a作者:闫立行 一、 Ans...

网友评论

      本文标题:Ansible魔法变量

      本文链接:https://www.haomeiwen.com/subject/shousktx.html