Q: "我该如何改变value.1
为整数?"
A: Use json_query https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter功能收件人号码 https://jmespath.org/specification.html#to-number。例如
- debug:
var: getent_passwd|
dict2items|
json_query('[?to_number(value[1]) >= `1000`].key')
Q: "我该如何改变1000
到一个变量?"
A:替换也应该转换为数字。声明是一个好主意query
分别地。例如
- set_fact:
myusers: "{{ getent_passwd|dict2items|json_query(query) }}"
vars:
myuid: 1000
query: "[?to_number(value[1]) >= to_number('{{ myuid }}')].key"
Q: "如何在 json_query 函数中添加更多条件?喜欢selectattr('value.5', 'ne', '/sbin/nologin')
."
A: Use pipe https://jmespath.org/specification.html#pipe-expressions or 与表达式 https://jmespath.org/specification.html#grammar。例如
- getent:
database: passwd
- set_fact:
myusers: "{{ getent_passwd|dict2items|json_query(query) }}"
vars:
myuid: 1000
myshell: /usr/sbin/nologin
query: "[?to_number(value[1]) >= to_number('{{ myuid }}')] |
[?value[5] == '{{ myshell }}'].{user: key, uid: value[1], shell: value[5]}"
- debug:
var: myusers
give
"myusers": [
{
"user": "libvirt-qemu",
"shell": "/usr/sbin/nologin",
"uid": "64055"
},
{
"user": "nobody",
"shell": "/usr/sbin/nologin",
"uid": "65534"
}
]
拟合变量和比较运算符 https://jmespath.org/specification.html#comparison-operators满足您的需求。
json_query 中的管道可能被视为反模式。所以与表达式 https://jmespath.org/specification.html#grammar应使用而不是管道。例如
query: "[?(to_number(value[1]) >= to_number('{{ myuid }}')) &&
(value[5] == '{{ myshell }}')].{user: key, uid: value[1], shell: value[5]}"