У меня есть два файла определения переменных:
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) }}"
Конкатенация "+
"будет работать со списками или строками, которые рассматриваются как списки.