首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据变量索引游戏中的主机数量?

如何根据变量索引游戏中的主机数量?
EN

Stack Overflow用户
提问于 2022-01-13 19:46:28
回答 1查看 136关注 0票数 1

我想设置一个事实,这样我的所有主机都可以根据一个定义的变量知道某个主机的索引号。我正在创建一个角色,因此主机的顺序可以更改每次运行。

想象一下这出戏里有3位主持人。假设host-2的变量me设置为true,而其他的则将其设置为false。

代码语言:javascript
复制
host-1 # variable 'me' is false
host-2 # variable 'me' is true, index number is 1
host-3 # variable 'me' is false

现在,想象一下这出戏是这样排序的:

代码语言:javascript
复制
host-3 # variable 'me' is false
host-1 # variable 'me' is false
host-2 # variable 'me' is true, index number is 2

在这种情况下,我希望所有主机都有一个包含游戏中主机的索引号的事实。示例:the_index_host: 2,因为它是带有定义变量的主机。

到目前为止,我知道如何将Ansible配置为在主机之间共享事实,但不知道如何根据索引号和值设置事实。

代码语言:javascript
复制
- block:

    - name: create dict of variable me amongst hosts
      set_fact:
        something: "{{ dict(keys|zip(values)) }}"
      vars:
        keys: "{{ ansible_play_hosts }}"
        values: "{{ ansible_play_hosts |
                    map('extract', hostvars, ['me'])
                    | list }}"

    - name: set_fact for index number
      set_fact:
        the_index_host: "{{ something }}"

  run_once: true
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 19:54:08

如果您想要主机名而不是索引,可以这样做:

代码语言:javascript
复制
- set_fact:
    primary_host: "{{ item }}"
  when: hostvars[item].me|default(false)
  loop: "{{ ansible_play_hosts }}"

我想如果你想要索引,那就是:

代码语言:javascript
复制
- set_fact:
    primary_host: "{{ hostidx }}"
  when: hostvars[item].me|default(false)
  loop: "{{ ansible_play_hosts }}"
  loop_control:
    index_var: hostidx
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70702265

复制
相关文章

相似问题

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