通过Ansible中的unicode列表进行过滤

时间:2018-04-18 20:40:12

标签: ansible json-query

我尝试做的是确定是否安装了特定软件包的特定版本,以便在我的playbook中的when子句中使用。我已经足够远,可以有效地获得正在安装的软件包的真/假,但是还没有能够将各个部分放在一起进行版本检查。

这是我到目前为止所得到的:

- 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_yamlto_json但没有运气。任何人都可以指出我正确的方向,或者有更好的方法来做我尝试的事情吗?

1 个答案:

答案 0 :(得分:0)

以下补充修复了我的问题:

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