首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >另一个变量ansible的变量值

另一个变量ansible的变量值
EN

Stack Overflow用户
提问于 2019-06-27 07:42:38
回答 1查看 143关注 0票数 0

抱歉,如果有很多关于变量内部变量的帖子,我的用例是不同的。尝试根据当前主机的索引号访问变量列表"efs_list“中的元素。清单中有三台主机

代码语言:javascript
复制
  vars:
    efs_list:
      - efs1
      - efs2
      - efs3
    sdb_index: "{{ groups['all'].index(inventory_hostname) }}" 

值应如下所示: host1- efs1 host2- efs2 host3- efs3

已尝试通过efs_list访问。{{ sdb_index }}对于- debug: var=efs_list.{{ sdb_index }},输出符合预期

代码语言:javascript
复制
ok: [10.251.0.174] => {
    "efs_list.0": "efs1"
}
ok: [10.251.0.207] => {
    "efs_list.1": "efs2"
}
ok: [10.251.0.151] => {
    "efs_list.2": "efs3"
}

但是为了

代码语言:javascript
复制
     - debug:
        msg: "{{ efs_list.{{ sdb_index }} }}"

fatal: [10.251.0.174]: FAILED! => {"msg": "template error while templating string: expected name or number. String: {{ efs_list.{{ sdb_index }} }}"}

---
- name: SDB Snapshots Creation
  hosts: all
  remote_user: "centos"
  become: yes
  vars:
    efs_list:
      - efs1
      - efs2
      - efs3
    sdb_index: "{{ groups['all'].index(inventory_hostname) }}" 

  tasks:
    - debug: var=efs_list.{{ sdb_index }}

    - debug:
        msg:  "{{ efs_list.{{ sdb_index }} }}"

    - name: Get  Filesystem ID
      become: false
      local_action: command aws efs describe-file-systems --creation-token "{{ efs_list.{{ sdb_index }} }}"
         --region us-east-1 --query FileSystems[*].FileSystemId --output text  
      register: fs_id

它应该将list的元素归属于当前索引enter code here

EN

回答 1

Stack Overflow用户

发布于 2019-06-27 08:57:22

extract过滤器可以完成这项工作。过滤器的输入必须是索引列表和容器(本例中为数组)。下面的任务

代码语言:javascript
复制
- set_fact:
    sdb_index: "{{ [] + [ groups['all'].index(inventory_hostname) ] }}"
- debug:
    msg: "{{ sdb_index|map('extract', efs_list)|list }}"

给予

代码语言:javascript
复制
ok: [host1] => {
    "msg": [
        "efs1"
    ]
}
ok: [host2] => {
    "msg": [
        "efs2"
    ]
}
ok: [host3] => {
    "msg": [
        "efs3"
    ]
}

如果主机未在清单中进行排序,则有必要在play中对其进行排序

代码语言:javascript
复制
- set_fact:
    my_hosts: "{{ groups['all']|sort }}"
- set_fact:
    sdb_index: "{{ [] + [ my_hosts.index(inventory_hostname) ] }}"
- debug:
    msg: "{{ sdb_index|map('extract', efs_list)|list }}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56782208

复制
相关文章

相似问题

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