通过 Ansible 中的 unicode 列表进行过滤
Filtering through unicode lists in Ansible
我想做的是确定是否安装了特定包的特定版本,以便在我的剧本后面的 when 子句中使用。对于正在安装的软件包,我已经了解了有效的 true/false,但无法将各个部分组合在一起进行版本检查。
这是我目前得到的:
- 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
但没有成功。谁能给我指出正确的方向,或者有更好的方法来做我正在尝试的事情?
以下补充解决了我的问题:
"{{ yum_test |json_query(\"[?version=='\" + tar_version + \"']\") }}"
我想做的是确定是否安装了特定包的特定版本,以便在我的剧本后面的 when 子句中使用。对于正在安装的软件包,我已经了解了有效的 true/false,但无法将各个部分组合在一起进行版本检查。
这是我目前得到的:
- 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
但没有成功。谁能给我指出正确的方向,或者有更好的方法来做我正在尝试的事情?
以下补充解决了我的问题:
"{{ yum_test |json_query(\"[?version=='\" + tar_version + \"']\") }}"