community.general.json_query фильтр — Выбор одного элемента или подмножества данных из сложной структуры данных
Примечание
Этот плагин фильтра является частью коллекции community.general (версия 9.5.0).
У вас, возможно, уже установлена эта коллекция, если вы используете пакет ansible. Она не включена в ansible-core. Чтобы проверить установку, выполните ansible-galaxy collection list.
Чтобы установить ее, используйте: ansible-galaxy collection install community.general. Для использования этого плагина фильтра необходимы дополнительные требования, см. Требования для получения подробностей.
Чтобы использовать его в playbook, укажите: community.general.json_query.
Описание
- Этот фильтр позволяет запросить сложную структуру JSON и итерироваться по ней с помощью циклов.
Требования
Ниже перечислены требования, необходимые на локальном контроллере, который выполняет этот фильтр.
- jmespath
Входные данные
Это описание входных данных фильтра, значения перед | community.general.json_query.
Параметр | Комментарии |
|---|---|
Входные данные любой / обязательный | Данные JSON для запроса. |
Позиционные параметры
Это описание позиционных параметров фильтра. Это значения positional1, positional2 и так далее в следующем примере: input | community.general.json_query(positional1, positional2, ...).
Параметр | Комментарии |
|---|---|
expr строка / обязательный | Выражение запроса. См. http://jmespath.org/examples.html для примеров. |
Примеры
- name: Define data to work on in the examples below
ansible.builtin.set_fact:
domain_definition:
domain:
cluster:
- name: cluster1
- name: cluster2
server:
- name: server11
cluster: cluster1
port: '8080'
- name: server12
cluster: cluster1
port: '8090'
- name: server21
cluster: cluster2
port: '9080'
- name: server22
cluster: cluster2
port: '9090'
library:
- name: lib1
target: cluster1
- name: lib2
target: cluster2
- name: Display all cluster names
ansible.builtin.debug:
var: item
loop: "{{ domain_definition | community.general.json_query('domain.cluster[*].name') }}"
- name: Display all server names
ansible.builtin.debug:
var: item
loop: "{{ domain_definition | community.general.json_query('domain.server[*].name') }}"
- name: Display all ports from cluster1
ansible.builtin.debug:
var: item
loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}"
vars:
server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port"
- name: Display all ports from cluster1 as a string
ansible.builtin.debug:
msg: "{{ domain_definition | community.general.json_query('domain.server[?cluster==`cluster1`].port') | join(', ') }}"
- name: Display all ports from cluster1
ansible.builtin.debug:
var: item
loop: "{{ domain_definition | community.general.json_query('domain.server[?cluster==''cluster1''].port') }}"
- name: Display all server ports and names from cluster1
ansible.builtin.debug:
var: item
loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}"
vars:
server_name_cluster1_query: "domain.server[?cluster=='cluster2'].{name: name, port: port}"
- name: Display all ports from cluster1
ansible.builtin.debug:
msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}"
vars:
server_name_query: "domain.server[?starts_with(name,'server1')].port"
- name: Display all ports from cluster1
ansible.builtin.debug:
msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}"
vars:
server_name_query: "domain.server[?contains(name,'server1')].port"
Значение возврата
Ключ | Описание |
|---|---|
Значение возврата любой | Результат запроса. Возвращено: успешно |
Подсказка
Элементы конфигурации для каждого типа записи имеют порядок приоритетов от низкого к высокому. Например, переменная, которая находится ниже в списке, переопределит переменную, которая находится выше.
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections/community/general/json_query_filter.html