Я использую Ansible для создания пользователей в нескольких средах. Я пытаюсь объединить свою пользовательскую переменную, содержащую все данные, необходимые для создания новых пользователей unix, в глобально разделяемую переменную. Для этого я планировал использовать подэлементы, чтобы контролировать, какие пользователи создаются на каких хостах и т. Д.
Однако я изо всех сил пытаюсь понять, как отфильтровать эти данные, чтобы получить правильный набор учетных данных для текущего хоста.
Мне нужно отфильтровать ключ «среды» только до элемента со значением «имя», которое я ищу, но сохранить в результате ключи родительского объекта.
Что у меня есть / что я хочу:
JSON:
{
"users": [
{
"name": "user1",
"token": "token",
"unix": "unixstring",
"mysql": "mysqlstring",
"environments": [
{
"name": "env_one",
"key": "keystring",
"user_groups": [
"one",
"two"
],
"host_groups": "all"
},
{
"name": "env_two",
"key": "keystring",
"user_groups": [
"three",
"four"
],
"host_groups": "all"
}
]
},
{
"name": "user2",
"token": "token",
"unix": "unixstring",
"mysql": "mysqlstring",
"environments": [
{
"name": "env_three",
"key": "keystring",
"user_groups": [
"one",
"two"
],
"host_groups": "all"
}
]
}
]
}
Что я хочу:
{
"users": [
{
"name": "user1",
"token": "token",
"unix": "unixstring",
"mysql": "mysqlstring",
"environments": [
{
"name": "env_one",
"key": "keystring",
"user_groups": [
"one",
"two"
],
"host_groups": "all"
}
]
}
]
}
Больше информации:
Мне удалось приблизиться с помощью этого запроса, но я не знаю, как еще больше сузить результат, чтобы все ключи в каждом объекте «пользователь» остались, но отфильтровали «среды» подэлементов до тех, которые соответствуют мой запрос.
Запрос JMESPath: users[?environments[?name=='env_one']]
Выход:
{
"users": [
{
"name": "user1",
"token": "token",
"unix": "unixstring",
"mysql": "mysqlstring",
"environments": [
{
"name": "env_one",
"key": "keystring",
"user_groups": [
"one",
"two"
],
"host_groups": "all"
},
{
"name": "env_two",
"key": "keystring",
"user_groups": [
"three",
"four"
],
"host_groups": "all"
}
]
}
]
}
Это исходный набор данных в YAML, если это полезно:
YAML:
---
users:
- name: user1
token: token
unix: unixstring
mysql: mysqlstring
environments:
- name: env_one
key: keystring
user_groups:
- one
- two
host_groups: all
- name: env_two
key: keystring
user_groups:
- three
- four
host_groups: all
- name: user2
toke n: token
unix: unixstring
mysql: mysqlstring
environments:
- name: env_three
key: keystring
user_groups:
- one
- two
host_groups: all