Spec-Zone.ru › Ansible

Проверка данных на соответствие заданным критериям с помощью Ansible

Модуль validate проверяет данные на соответствие заданным вами критериям с помощью механизма проверки. Эти данные можно получить с устройства или из файла, проверить их на соответствие заданным критериям, а затем использовать результаты для выявления отклонений в конфигурации или рабочем состоянии и при необходимости принять меры по их устранению.

  • Знакомство с модулем validate
  • Структурирование данных
  • Определение критериев проверки
  • Проверка данных

Знакомство с модулем validate

Коллекция ansible.utils содержит модуль validate.

Чтобы проверить данные:

  1. Получите структурированные данные или преобразуйте данные в структурированный формат с помощью модуля cli_parse.
  2. Определите критерии, которым должны соответствовать данные.
  3. Выберите механизм проверки и проверьте данные, чтобы определить, соответствуют ли они заданным критериям и выбранному механизму проверки.

Структура данных и критерии зависят от выбранного механизма проверки. В приведенных здесь примерах используется механизм проверки 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"

В этих задачах мы:

  1. Задали для data структурированные данные JSON из модуля cli_parse.
  2. Задали для criteria определенный нами файл критериев JSON.
  3. Задали для механизма проверки значение 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API