Spec-Zone.ru › Ansible

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

Модуль 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.

Определение критериев проверки

В этом примере используется движок валидации jsonschema для анализа структурированных данных JSON, которые мы создали в предыдущем разделе. Критерии определяют состояние, которому должны соответствовать данные. В данном случае мы можем проверить соответствие желаемому административному состоянию 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 на контрольном узле.

Задачи выдают список ошибок, указывающих на интерфейсы, у которых значение admin не соответствует состоянию 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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/network/user_guide/validate.html

Spec-Zone.ru

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