Как избежать символа двоеточия в запросе json с использованием ansible

#python #json #ansible #jmespath #json-query

#python #json #ansible #jmespath #json-запрос

Вопрос:

Запускаю модуль Ansible ec2_instance_facts и регистрирую его в переменной с именем ec2.

У меня есть теги на экземпляре ec2, в имени ключа которого есть символы двоеточия.

Я могу получить значение тега среды, используя это:

  set_fact:
    number_of_nodes: "{{ ec2.instances|json_query('[*].tags.environment') }}"
  

Но не удается получить значение «aws: lc:sg», пытаясь выполнить следующее:

  set_fact:
    number_of_nodes: "{{ ec2.instances|json_query('[*].tags.aws:lc:sg') }}"
  

Также попробовал, поместив символы , , /, // перед двоеточием. Не работает.

Кто-нибудь может помочь? : (

Ответ №1:

При желании экранировать ? : - документы ansible рекомендуют заключать их в двойные кавычки " . (здесь документы, в вашем случае это довольно сложно, поскольку вы должны использовать одинарные кавычки в фильтре json_query. Вы можете попробовать заменить аргументы этого фильтра на var, а позже, когда вы объявите этот var, вы сможете использовать двойные кавычки.

  set_fact:
    number_of_nodes: "{{ ec2.instances|json_query(the_var) }}"
 vars:
    the_var: "[*].tags.aws:lc:sg"
  

Я надеюсь, что это поможет!
Приветствия!

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

1. большое вам спасибо. добавление одинарной кавычки снаружи и двойной кавычки внутри сработало для меня. ‘ the_var: [*].»tags.aws:lc:sg»‘

2. Рад это слышать!

3. Было бы неплохо, если бы вы могли отредактировать ответ, поскольку он работает не так, как описано в нем, а только так, как в комментарии @sherri