Итак, у меня проблема с Ansible + AWS EC2.
Если тип диска - «io1», следует указать «iops», иначе они не должны указываться. Если я хочу сделать тип диска настраиваемым, я должен подать заявку когда, но он не работает:
- name: Provision AWS Instances
ec2:
instance_type: "{{ ec2_instance_type }}"
image: "{{ ec2_ami_id }}"
...
volumes:
- device_name: "{{ ec2_root_disk_name }}"
volume_type: "{{ ec2_root_disk_type }}"
volume_size: "{{ ec2_root_disk_size }}"
delete_on_termination: "{{ ec2_root_disk_delete_on_termination }}"
iops: "{{ ec2_root_disk_iops }}"
when: ec2_root_disk_type == 'io1'
- device_name: "{{ ec2_root_disk_name }}"
volume_type: "{{ ec2_root_disk_type }}"
volume_size: "{{ ec2_root_disk_size }}"
delete_on_termination: "{{ ec2_root_disk_delete_on_termination }}"
when: ec2_root_disk_type != 'io1'
Но это вложенное условие «когда» не обрабатывается, и диск добавляется дважды:
"volumes": [
{
"delete_on_termination": "true",
"device_name": "/dev/sda1",
"iops": "100",
"volume_size": "30",
"volume_type": "gp2",
"when": "ec2_root_disk_type == 'io1'"
},
{
"delete_on_termination": "true",
"device_name": "/dev/sda1",
"volume_size": "30",
"volume_type": "gp2",
"when": "ec2_root_disk_type != 'io1'"
},
]
Я мог бы добавить «когда» ко всей команде, за исключением того, что у меня может быть до 5 дисков, поэтому это будет означать копирование более 32 раз.
Можно ли сделать процесс Ansible 'когда' во вложенных списках?
Можно ли собрать этот список в переменную, ссылаясь на него в этой команде? Документация Ansible ничего не говорит о нестроковых, структурированных переменных. Может быть, я могу применить фильтрацию коллекции как-нибудь?
Какой рекомендуемый порядок действий здесь? Я думаю, что все будут сталкиваться с этой проблемой, когда будут пытаться создавать тома настраиваемого типа.