Q: "Как я могу изменить 'value.1' на целое число?"
A: Можно использовать json_query function 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: Можно использовать pipe или и выражение . Например,
- 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
дать
"myusers": [
{
"user": "libvirt-qemu",
"shell": "/usr/sbin/nologin",
"uid": "64055"
},
{
"user": "nobody",
"shell": "/usr/sbin/nologin",
"uid": "65534"
}
]
Установить переменные и оператор сравнения для ваших нужд.
Возможно, труба в json_query считается анти-паттерном. Поэтому вместо канала следует использовать и выражение . Например
query: "[?(to_number(value[1]) >= to_number('{{ myuid }}')) &&
(value[5] == '{{ myshell }}')].{user: key, uid: value[1], shell: value[5]}"