Проверка данных на соответствие заданным критериям с помощью Ansible
Модуль validate проверяет данные на соответствие заданным вами критериям с помощью механизма проверки. Эти данные можно получить с устройства или из файла, проверить их на соответствие заданным критериям, а затем использовать результаты для выявления отклонений в конфигурации или рабочем состоянии и при необходимости принять меры по их устранению.
- Знакомство с модулем validate
- Структурирование данных
- Определение критериев проверки
- Проверка данных
Знакомство с модулем validate
Коллекция ansible.utils содержит модуль validate.
Чтобы проверить данные:
- Получите структурированные данные или преобразуйте данные в структурированный формат с помощью модуля cli_parse.
- Определите критерии, которым должны соответствовать данные.
- Выберите механизм проверки и проверьте данные, чтобы определить, соответствуют ли они заданным критериям и выбранному механизму проверки.
Структура данных и критерии зависят от выбранного механизма проверки. В приведенных здесь примерах используется механизм проверки jsonschema из коллекции ansible.utils. Подписка Red Hat Ansible Automation Platform поддерживает ограниченное использование общедоступных API jsonschema в соответствии с документацией.
Структурирование данных
Можно получить ранее структурированные данные из файла или структурировать данные с помощью модуля cli_parse.
В следующем примере извлекается рабочее состояние некоторых сетевых интерфейсов (Cisco NXOS), а затем это состояние преобразуется в структурированные данные с помощью анализатора ansible.netcommon.pyats.
---
- hosts: nxos
connection: ansible.netcommon.network_cli
gather_facts: false
vars:
ansible_network_os: cisco.nxos.nxos
ansible_user: "changeme"
ansible_password: "changeme"
tasks:
- name: "Fetch interface state and parse with pyats"
ansible.utils.cli_parse:
command: show interface
parser:
name: ansible.netcommon.pyats
register: nxos_pyats_show_interface
- name: print structured interface state data
ansible.builtin.debug:
msg: "{{ nxos_pyats_show_interface['parsed'] }}"
В результате получаются следующие структурированные данные.
ok: [nxos] => {
"changed": false,
"parsed": {
"Ethernet2/1": {
"admin_state": "down",
"auto_mdix": "off",
"auto_negotiate": false,
"bandwidth": 1000000,
"beacon": "off"
<--output omitted-->
},
"Ethernet2/10": {
"admin_state": "down",
"auto_mdix": "off",
"auto_negotiate": false,
"bandwidth": 1000000,
"beacon": "off",
<--output omitted-->
}
}
}
Подробнее о преобразовании полуструктурированных данных в структурированные см. в разделе Разбор полуструктурированного текста с помощью Ansible.
Определение критериев проверки
В этом примере для разбора структурированных данных JSON, созданных в предыдущем разделе, используется механизм проверки jsonschema. Критерии определяют состояние, которому должны соответствовать данные. В данном случае можно проверить, что для всех интерфейсов задано требуемое административное состояние up.
Критерии для jsonschema в этом примере выглядят следующим образом:
$ cat criteria/nxos_show_interface_admin_criteria.json
{
"type" : "object",
"patternProperties": {
"^.*": {
"type": "object",
"properties": {
"admin_state": {
"type": "string",
"pattern": "up"
}
}
}
}
}
Проверка данных
Теперь, когда у нас есть структурированные данные и критерии, мы можем проверить эти данные с помощью модуля validate.
Следующие задачи проверяют, соответствует ли текущее состояние интерфейсов требуемому состоянию, заданному в файле критериев.
- name: Validate interface admin state
ansible.utils.validate:
data: "{{ nxos_pyats_show_interface['parsed'] }}"
criteria:
- "{{ lookup('file', './criteria/nxos_show_interface_admin_criteria.json') | from_json }}"
engine: ansible.utils.jsonschema
ignore_errors: true
register: result
- name: Print the interface names that do not satisfy the desired state
ansible.builtin.debug:
msg: "{{ item['data_path'].split('.')[0] }}"
loop: "{{ result['errors'] }}"
when: "'errors' in result"
В этих задачах мы:
- Задали для
dataструктурированные данные JSON из модуля cli_parse. - Задали для
criteriaопределенный нами файл критериев JSON. - Задали для механизма проверки значение
jsonschema.
Примечание
Значение параметра criteria может быть списком и должно соответствовать формату, определенному используемым механизмом проверки. Для этого примера необходимо установить jsonschema на управляющем узле.
В результате выполнения задач выводится список ошибок с указанием интерфейсов, административное состояние которых не равно up.
TASK [Validate interface for admin state] ***********************************************************************************************************
fatal: [nxos02]: FAILED! => {"changed": false, "errors": [{"data_path": "Ethernet2/1.admin_state", "expected": "up", "found": "down", "json_path": "$.Ethernet2/1.admin_state", "message": "'down' does not match 'up'", "relative_schema": {"pattern": "up", "type": "string"}, "schema_path": "patternProperties.^.*.properties.admin_state.pattern", "validator": "pattern"}, {"data_path": "Ethernet2/10.admin_state", "expected": "up", "found": "down", "json_path": "$.Ethernet2/10.admin_state", "message": "'down' does not match 'up'", "relative_schema": {"pattern": "up", "type": "string"}, "schema_path": "patternProperties.^.*.properties.admin_state.pattern", "validator": "pattern"}], "msg": "Validation errors were found.\nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. \nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. \nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. "}
...ignoring
TASK [Print the interface names that do not satisfy the desired state] ****************************************************************************
Monday 14 December 2020 11:05:38 +0530 (0:00:01.661) 0:00:28.676 *******
ok: [nxos] => {
"msg": "Ethernet2/1"
}
ok: [nxos] => {
"msg": "Ethernet2/10"
}
Это показывает, что Ethernet2/1 и Ethernet2/10 не соответствуют заданным критериям. Можно создать отчет или предпринять дальнейшие действия, чтобы устранить это несоответствие и привести интерфейсы в требуемое состояние.
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/network/user_guide/validate.html