0

Я работаю на PlayBook анзибль, где я использую ec2_vpc_subnet_facts регистрировать факты о подсетях в VPC нравится:Сильные значения поиска из сложной структуры?

- ec2_vpc_subnet_facts: 
    region: "{{ ec2_region }}" 
    filters: 
     vpc-id: "{{ vpc.vpc.id }}" 
    register: vpc_subnet_facts 

, таким образом, получить обратно структуру, как (удалены несущественных признаков):

"vpc_subnet_facts": { 
    "changed": false, 
    "subnets": [ 
     { 
      ... 
      "id": "subnet-0bb50753", 
      ... 
      "tags": { 
       "Name": "mytag1" 
      }, 
      ... 
     }, 
     { 
      ... 
      "id": "subnet-0bb50754", 
      ... 
      "tags": { 
       "Name": "mytag2" 
      }, 
      ... 
     } 
    ] 
} 

Позже в учебном пособии при создании экземпляров EC2 идея заключается в поиске идентификатора подсети на основе значения тега для атрибутов ec2vpc_subnet_id, то есть наличия mytag1, поиска связанного идентификатора подсети subnet-0bb50753.

Мой текущий подход заключается в создании словаря tag => subnet-ID с использованием set_facts из результата ec2_vpc_subnet_facts, но меня интересуют альтернативы.

С уважением, Ola

ответ

3

selectattr дзиндзя фильтр является вашим другом здесь:

- debug: msg="{{ (vpc_subnet_facts.subnets | selectattr('tags.Name','equalto','mytag1') | first).id }}" 

Что сделано здесь: сделать подмножество элементов из vpc_subnet_facts.subnets где tags.Name=='mytag1', возьмите первый элемент, возьмите id поле.

+0

Привет, Константин, спасибо за решение. Очень хорошо. –