Извлечение volume_id из регистра создания ec2

#json #ansible

#json #ansible

Вопрос:

Мне нужно извлечь идентификаторы томов EBS из регистра, возвращаемого при вызове создания EC2. Я уже разобрался с устройством, в котором хранятся нужные мне данные, но последний шаг ускользает от меня.

Я пытался сделать это с:

 - set_fact:
        volume_id_list: "{{ devices | json_query('[*].volume_id') }}"
    - debug: var=volume_id_list
  

И это возвращает пустую строку.

     "devices": {
        "/dev/sdf": {
            "delete_on_termination": true, 
            "status": "attached", 
            "volume_id": "vol-0b2c92cdcblah"
        }, 
        "/dev/xvda": {
            "delete_on_termination": true, 
            "status": "attached", 
            "volume_id": "vol-086a722c4blah"
        }
    }
  

То, что я хотел увидеть, было чем-то вроде:

«vol-0b2c92cdcblah» «vol-086a722c4blah»

Ответ №1:

Ваше выражение jmespath в json_query не соответствует ничему в вашей структуре данных. Таким образом, пустая строка является абсолютно правильным результатом 🙂

Теперь, чтобы получить то, что вы хотите, из вашей текущей структуры данных, вам нужно изменить свой запрос: json_query('*.volume_id')

Комментарии:

1. Пробовал — все еще пустой список.

2. Виноват! Спасибо — это работает. Также спасибо за указатель на документацию jmespath. Очень информативно.

3. @cassini232 рассмотрите возможность принятия решения, если это сработало для вас. Это позволит людям знать, что на ваш ответ есть правильный ответ при поиске.