Возможно, если вложенное значение не существует во вложенном массиве - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы сделать мой Ansible EIP создание идемпотентным.Для этого я хочу, чтобы задача выполнялась только в том случае, если для тега «Имя» значение «тег_1» не существует.Однако я не уверен, как я мог бы добавить это как «когда» в конце задачи.

    "eip_facts.addresses": [
    {
        "allocation_id": "eipalloc-blablah1", 
        "domain": "vpc", 
        "public_ip": "11.11.11.11", 
        "tags": {
            "Name": "tag_1", 
        }
    }, 
    {
        "allocation_id": "eipalloc-blablah2", 
        "domain": "vpc", 
        "public_ip": "22.22.22.22", 
        "tags": {
            "Name": "tag_2", 
        }
    }, 
    {
        "allocation_id": "eipalloc-blablah3", 
        "domain": "vpc", 
        "public_ip": "33.33.33.33", 
        "tags": {
            "Name": "tag_3", 
        }
    }
]

(Теги добавляются позже) Я ищу что-то вроде:

- name: create elastic ip 
  ec2_eip:
    region: eu-west-1
    in_vpc: yes
  when: eip_facts.addresses[].tags.Name = "tag_1" is not defined

Как правильно достичь этого?Помните, что значение не может существовать в этом параметре во всем массиве, а не в одной итерации.

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошо, я нашел полуприличное решение

- name: Get list of EIP Name Tags
  set_fact:
    eip_facts_Name_tag: "{{ eip_facts.addresses | map(attribute='tags.Name') | list }}"

, которое извлекает тег Name и помещает их в массив

ok: [localhost] => {
"msg": [
    "tag_1", 
    "tag_2", 
    "tag_3"
  ]
}

, а затем ...

- debug: 
    msg: "Hello"
  when: '"tag_1" in "{{ eip_facts_Name_tag }}"'

Это будет работать, но будьте осторожны, это не делает точный поиск строки.Так что, если вы выполнили поиск только по «тегу», это тоже считается хитом.

...