ansible - 在 Ansible 中解析字典键或参数变量

标签 ansible

在 Ansible 中,如果我尝试使用变量作为参数名或键名,则永远无法解析。例如,如果我有 {{ some_var }}: true , 或者:

template: "{{ resolve_me_to_src }}": "some_src"

变量只会按字面意思使用,永远不会解析。我的具体用例是将其与 ec2 模块一起使用,其中我的一些标签名称存储为变量:
- name: Provision a set of instances
  ec2:
    group: "{{ aws_security_group }}"
    instance_type: "{{ aws_instance_type }}"
    image: "{{ aws_ami_id }}"
    region: "{{ aws_region }}"
    vpc_subnet_id: "{{ aws_vpc_subnet_id }}"
    key_name: "{{ aws_key_name }}"
    wait: true
    count: "{{ num_machines }}"
    instance_tags: { "{{ some_tag }}": "{{ some_value }}", "{{ other_tag }}": "{{ other_value }}" }

有没有办法解决?我可以标记我想以某种方式强制评估吗?

最佳答案

这对你有用吗?

(rc=0)$ cat training.yml
- hosts: localhost
  tags: so5
  gather_facts: False
  vars: [
      k1: 'key1',
      k2: 'key2',
      d1: "{
        '{{k1}}': 'value1',
        '{{k2}}': 'value2',
      }",
    ]
  tasks:
  - debug: msg="{{item}}"
    with_dict: "{{d1}}"


(rc=0)$ ansible-playbook training.yml -t so5

PLAY [localhost] **************************************************************** 

PLAY [localhost] **************************************************************** 

TASK: [debug msg="{{item}}"] ************************************************** 
ok: [localhost] => (item={'key': 'key2', 'value': 'value2'}) => {
    "item": {
        "key": "key2", 
        "value": "value2"
    }, 
    "msg": "{'value': 'value2', 'key': 'key2'}"
}
ok: [localhost] => (item={'key': 'key1', 'value': 'value1'}) => {
    "item": {
        "key": "key1", 
        "value": "value1"
    }, 
    "msg": "{'value': 'value1', 'key': 'key1'}"
}

PLAY RECAP ******************************************************************** 
localhost                    : ok=1    changed=0    unreachable=0    failed=0   

(rc=0)$

诀窍是用双引号包裹 dict 声明。 Ansible 将这种未记录的(但一致的)和糟糕的翻译(ansible 的 shell 变量扩展等效项)应用于 playbook 中的大多数(不是全部)YAML 值(':' 的所有 RHS)。这是将这些字符串以某种未知顺序通过 Jinja2-engine、Python-interpreter 和 ansible-engine 的某种组合。

关于ansible - 在 Ansible 中解析字典键或参数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805976/

相关文章:

ansible - 在主机上执行任务的正确方法

pip - 为什么 Ansible 不以 sudo 用户身份运行 Pip?

Ansible 未加载 "all"组变量

Vagrant 起来 : bad interpreter: No such file or directory

ssh - Ansible - 在两个节点之间移动 ssh key

windows - 使用 Windows 节点的 Ansible - 如何创建目录

http - 使用 uri 模块的 SPNEGO 身份验证

ANSIBLE0013 仅当需要 shell 功能时才使用 shell

ubuntu - Ansible playbook 安装失败

Ansible - 注册变量在循环中的使用