Фильтрация по спискам юникода в Ansible

То, что я пытаюсь сделать, это определить, установлена ​​ли конкретная версия определенного пакета для использования в предложении когда позже в моей книге игр. Я продвинулся достаточно далеко, чтобы получить то, что фактически является истинным / ложным для устанавливаемого пакета, но не смог собрать воедино кусочки для проверки версии.

Вот что у меня так далеко:

- name: Yum list of installed rpms
  yum:
    list: installed
  register: yum_installed

- name: Get tar version info
  set_fact:
    yum_test:  "{{yum_installed|json_query(jsonquery) }}"
  vars:
    jsonquery: "results[?name=='tar']"

-  debug:
    msg: "Success"
  when: yum_test|json_query([?version=='1.62'])

Это ошибка, которую я получаю в итоге:

The conditional check 'yum_test|json_query([?version=='1.62'])' failed.
The error was: template error while templating string: unexpected char u'?' at 26. 
String: {% if yum_test|json_query([?version=='1.62']) %} True {% else %} False {% endif %}

Если я взгляну на yum_test Факт, который я создал, выглядит так:

[{
  u'envra': u'2:tar-1.26-31.el7.x86_64', 
  u'name': u'tar', 
  u'repo': u'installed', 
  u'epoch': u'2', 
  u'version': u'1.26', 
  u'release': u'31.el7', 
  u'yumstate': u'installed', 
  u'arch': u'x86_64'
}]

Мне кажется, что моя проблема в том, что список сохраняется как объект Unicode... но я не уверен, как его очистить. Я пытался использовать to_yaml а также to_json без удачи Кто-нибудь может указать мне правильное направление, или есть лучший способ сделать то, что я пытаюсь?

1 ответ

Решение

Следующие дополнения исправляют мою проблему:

"{{ yum_test |json_query(\"[?version=='\" + tar_version + \"']\") }}"

Другие вопросы по тегам