Назад | Перейти на главную страницу

Ansible Соедините две переменные

У меня есть два файла определения переменных:

vars.yml
aws_common_tags:
    Project: "{{ project_name }}"
    Application: "{{ application_name }}"
    Region: "{{ aws_region }}"
    Ansible: "Yes"

instance.yml
ec2_instance_tags:
    environment_name: dev

Теперь в task.yml я пытаюсь создать экземпляр aws ec2 со всеми тегами, но он не работает.

ec2:
    key_name: "{{ keypair_name }}"
    instance_type: "{{ ec2_instance_type }}"
    instance_tags: "{{ aws_common_tags + ec2_instance_tags }}"

Мы получаем следующую ошибку:

"tags": {
        "Ansible": "Yes",
        "Application": "webserver",
        "Project": "document_upload",
        "Region": "us-west-2"
    },

fatal: [localhost]: FAILED! => {
    "msg": "Unexpected templating type error occurred on ({{ aws_common_tags + ec2_instance_tags }}): unsupported operand type(s) for +: 'dict' and 'dict'" }

Спасибо

Это возможно комбинировать словари. Например

ec2:
    key_name: "{{ keypair_name }}"
    instance_type: "{{ ec2_instance_type }}"
    instance_tags: "{{ aws_common_tags|combine(ec2_instance_tags) }}"

Конкатенация "+"будет работать со списками или строками, которые рассматриваются как списки.