ansible playbook的变量用法相关介绍(四)----内置变量

1.内置变量ansible_version

先从一个简单的内置变量说起,比如,我们可以通过内置变量ansible_version获取到ansible的版本号,示例命令如下

[root@server4 script]# ansible testB -m debug -a "msg={{ansible_version}}"

在这里插入图片描述

2. 内置变量inventory_hostname

通过inventory_hostname变量可以获取到被操作的当前主机的主机名称,这里所说的主机名称并不是linux系统的主机名,而是对应主机在清单中配置的名称,假设我的清单配置如下:

[test-group]
172.25.1.1
testB.westos.com ansible_host=172.25.1.2
testC.redhat.com ansible_host=172.25.1.3

清单中配置了三个主机,第一个主机以IP的形式配置,第二个主机和第三个主机都以别名的方式配置,他们同属于test_group组。

那么我们使用内置变量inventory_hostname获取一下各个主机的对应的主机名,看看会返回什么,示例如下:

[root@server4 ~]# ansible test-group -m debug -a "msg={{inventory_hostname}}"

在这里插入图片描述
从返回信息可以看出,如果使用IP配置主机,inventory_hostname的值就是IP,如果使用别名,inventory_hostname的值就是别名。

3.内置变量inventory_hostname_short

与内置变量inventory_hostname类似,通过inventory_hostname_short也可以获取当前play操作的主机在清单中对应的名称,但是这个名称更加简短。

那么通过内置变量inventory_hostname_short获取到的主机的简短名称如下:

[root@server4 ~]# ansible test-group -m debug -a "msg={{inventory_hostname_short}}"

在这里插入图片描述
可以看到,无论是IP还是别名,如果清单的主机名称中包含.,inventory_hostname_short都会取得主机名中第一个”.”之前的字符作为主机的简短名称。

4.内置变量groups

通过groups内置变量可以获取到清单中”所有分组”的”分组信息”,什么意思呢?我们先来看一个清单配置,假设我的清单配置如下:

172.25.1.1
testB.westos.com ansible_host=172.25.1.2
testC.redhat.com ansible_host=172.25.1.3

[testA]
test1 ansible_host=172.25.1.1
test2 ansible_host=172.25.1.2

[testB]
test3 ansible_host=172.25.1.3

[test:children]
testA
testB

上述清单中,显式的指定了三个组,testA组、testB组、test组,其中,testA组与testB组是test组的子组,除了组中的主机,还有三台主机没有任何分组,直接写在了清单中。(由于主机有限,这里未分组的ip与指定分组的ip设置相同)

现在,我们获取一下groups变量的值,看看会返回哪些信息,随便操作清单中的任意一台主机即可,示例如下

[root@server4 script]# ansible testB -m debug -a "msg={{groups}}"
test3 | SUCCESS => {
    "msg": {
        "all": [
            "172.25.1.1", 
            "testB.westos.com", 
            "testC.redhat.com", 
            "test1", 
            "test2", 
            "test3"
        ], 
        "test": [
            "test1", 
            "test2", 
            "test3"
        ], 
        "testA": [
            "test1", 
            "test2"
        ], 
        "testB": [
            "test3"
        ], 
        "ungrouped": [
            "172.25.1.1", 
            "testB.westos.com", 
            "testC.redhat.com"
        ]
    }
}

从上述返回信息可以看出,所有主机默认被分成了组名为”all”的组,testA组中有两台主机,testB组中有一台主机,由于testA组和testB组都属于test组的子组,所以testA组与testB组中的主机都属于test组,由于有三台主机在清单中并未分组,所以,ansible自动将没有分组的主机分到了名为”ungrouped”的组中,即组名为”未分组”的组。

我们还能够通过组名,获取到指定组的分组信息,假设,我想要获取到上例中testA组中的主机名称,则可以使用如下方法。

[root@server4 ~]# ansible testB -m debug -a "msg={{groups.testA}}"

在这里插入图片描述
当然,语法也可以改为如下

# ansible testB -m debug -a "msg={{groups['testA']}}"

所以,如果我们想要获取到所有未分组主机的主机名,则可以使用如下方法

[root@server4 ~]# ansible testB -m debug -a "msg={{groups.ungrouped}}"

在这里插入图片描述

5. 内置变量group_names

见名知义,我们可以通过内置变量group_names获取到当前主机所在分组的组名,比如,我的清单配置和上例相同。

那么,当我操作test1主机时,group_names变量值如下

[root@server4 ~]# ansible test1 -m debug -a "msg={{group_names}}"

在这里插入图片描述
如上例返回值所示,test1主机属于testB组,而testB组又是test组的子组,所以test1主机同时属于testB组和test组,所以,最终返回的信息中包括test与testB

当我们操作未分组的主机时,group_names的值为”ungrouped”,示例如下

[root@server4 ~]# ansible 172.25.1.1 -m debug -a "msg={{group_names}}"

在这里插入图片描述

6.内置变量inventory_dir

我们可以通过inventory_dir变量获取到ansible主机中清单文件的存放路径,我使用的是默认的清单文件/etc/ansible/hosts,所以,inventory_dir变量对应的值为/etc/ansible,如下例所示:

[root@server4 ~]# ansible test1 -m debug -a "msg={{inventory_dir}}"

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值