首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时动态访问当前主机的主机。

在运行时动态访问当前主机的主机。
EN

Stack Overflow用户
提问于 2020-07-17 20:17:00
回答 1查看 1.9K关注 0票数 1

使用Ansible 2.5.0。

问题:如何在运行时执行期间动态访问当前主机的主机变量。

库存档案:

代码语言:javascript
复制
[group_one]
host-1 ansible_host=1.2.3.4
host-2 ansible_host=5.6.7.8

[group_two]
host-3 ansible_host=2.4.6.8

我目前的任务是:

代码语言:javascript
复制
- hosts: group_one
  tasks:
    - name: set fact for all ip's in play execution
      set_fact:
        all_ips: "{{ groups['all'] | map('extract', hostvars, ['ansible_host'] ) | join(',') }}"

    # outcome = 1.2.3.4,5.6.7.8,2.4.6.8

这种结果是不可取的。在执行过程中,只使用主机-1和2,但也添加了主机-3的IP。

现在,我已经看过Ansible的幻数变量,但是似乎没有任何变量可以以满足我的需求的方式使用。

因为在运行时我想要变量,所以我不想设置变量"{{ groups['group_one'] }}",因为这样做会失败。

如何以这样的方式配置Ansible,结果将是1.2.3.4,5.6.7.8,而无需静态地配置任何变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 21:37:55

在不想使用ansible_play_hosts 幻数变量的情况下,可以使用group_one作为对当前主机的动态引用。

ansible_play_hosts是当前游戏中仍处于活动状态的所有主机的完整列表。

inventory.ini

代码语言:javascript
复制
[group_one]
host-1 ansible_host=1.2.3.4
host-2 ansible_host=5.6.7.8

[group_two]
host-3 ansible_host=2.4.6.8

foo.yaml

代码语言:javascript
复制
- hosts: group_one
  gather_facts: no

  tasks:
    - set_fact:
        all_ips: "{{ ansible_play_hosts | map('extract', hostvars, ['ansible_host']) | join(',') }}"
    - debug:
        msg: "{{ all_ips }}"
      run_once: yes
代码语言:javascript
复制
$ ansible-playbook -i inventory.ini foo.yaml 

PLAY [group_one] *****************************************************************************************************************************************************************************************************************************

TASK [set_fact] ******************************************************************************************************************************************************************************************************************************
ok: [host-1]
ok: [host-2]

TASK [debug] *********************************************************************************************************************************************************************************************************************************
ok: [host-1] => {
    "msg": "1.2.3.4,5.6.7.8"
}

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
host-1                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
host-2                     : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62961226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档