Вот пример Sed, который работает с переменной:
q=242M
sed 's/.$/ &/' <<eof
$q
eof
Использовать фильтр разница . Например
- set_fact:
users_all: "{{ users|json_query('[].name') }}"
- set_fact:
dirs_forbidden: "{{ dirs_forbidden|default([]) + [
{(item.keys()|list|first):
(users_all|difference(item.values()|list|first))}] }}"
loop: "{{ dirs_allowed }}"
- debug:
var: dirs_forbidden
дать
"dirs_forbidden": [
{
"dir1": [
"user3"
]
},
{
"dir2": [
"user2",
"user3"
]
},
{
"dir3": [
"user1",
"user3"
]
}
]
ПОЗВ. Работа со словарями в этом случае упрощает код. Например
- set_fact:
users_all: "{{ users|json_query('[].name') }}"
- set_fact:
dirs_all: "{{ users|
json_query('[].dirs')|flatten|unique }}"
- set_fact:
dirs_allowed: "{{ dirs_allowed|default({})|
combine({item: users|json_query(query)}) }}"
vars:
query: "[?dirs.contains(@, '{{ item }}')].name"
loop: "{{ dirs_all }}"
- debug:
var: dirs_allowed
- set_fact:
dirs_forbidden: "{{ dirs_forbidden|default({})|
combine({item: (users_all|difference(dirs_allowed[item]))}) }}"
loop: "{{ dirs_all }}"
- debug:
var: dirs_forbidden
дать
"dirs_allowed": {
"dir1": [
"user1",
"user2"
],
"dir2": [
"user1"
],
"dir3": [
"user2"
]
}
"dirs_forbidden": {
"dir1": [
"user3"
],
"dir2": [
"user2",
"user3"
],
"dir3": [
"user1",
"user3"
]
}