Spec-Zone.ru › Ansible 2.11

ansible.netcommon.cli_parse – Парсинг вывода командной строки или текста с использованием различных парсеров

Примечание

Этот плагин входит в коллекцию ansible.netcommon (версия 1.5.0).

Для установки используйте: ansible-galaxy collection install ansible.netcommon.

Чтобы использовать его в плейбуке, укажите: ansible.netcommon.cli_parse.

Введено в версии 1.2.0: модуля ansible.netcommon

  • Обзор
  • Параметры
  • Примечания
  • Примеры
  • Возвращаемые значения

Обзор

  • Парсинг вывода командной строки или текста с использованием различных парсеров

Примечание

У этого модуля есть соответствующий плагин действий.

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
command
строка
Команда для выполнения на хосте
parser
словарь / обязательно
Параметры, специфичные для парсера
command
строка
Команда для поиска шаблона парсера
name
строка / обязательно
Имя используемого парсера
os
строка
Передача значения операционной системы парсеру
Для парсера `ntc_templates` это значение должно быть в формате `<производитель>_<os>`.
template_path
строка
Путь к шаблону парсера на контроллере Ansible
Может быть относительным или абсолютным.
vars
словарь
Дополнительные параметры, специфичные для парсера
Примеры переменных, специфичных для парсера, см. в руководстве пользователя cli_parse
https://docs.ansible.com/ansible/latest/network/user_guide/cli_parsing.html
set_fact
строка
Установить полученные данные парсинга как факт
text
строка
Текст для парсинга

Примечания

Примечание

  • Путь по умолчанию для поиска шаблона парсера — templates/{{ short_os }}_{{ command }}.{{ extension }}
  • => short_os получен из ansible_network_os или ansible_distribution и переведен в нижний регистр
  • => command — команда, переданная модулю, пробелы заменены на _
  • => extension — специфичен для используемого парсера (native=yaml, textfsm=textfsm, ttp=ttp)
  • Используется стандартный путь Ansible для поиска каталога шаблонов для шаблонов парсеров.
  • Некоторые парсеры могут иметь дополнительные параметры конфигурации. См. ключ parsers/vars и документацию парсера.
  • Некоторым парсерам для работы на контроллере Ansible требуются сторонние библиотеки Python и определенная версия Python.
  • Например, Pyats требует pyats и genie и требует Python 3
  • Например, ntc_templates требует ntc_templates
  • Например, textfsm требует textfsm
  • Например, ttp требует ttp
  • Например, xml требует xml_to_dict
  • Поддержка сторонних библиотек Python ограничена использованием их общедоступных API, как описано в документации.
  • Дополнительную информацию и примеры можно найти в руководстве пользователя по парсингу:
  • https://docs.ansible.com/ansible/latest/network/user_guide/cli_parsing.html

Примеры

# Using the native parser

# -------------
# templates/nxos_show_interface.yaml
# - example: Ethernet1/1 is up
#   getval: '(?P<name>\S+) is (?P<oper_state>\S+)'
#   result:
#     "{{ name }}":
#         name: "{{ name }}"
#         state:
#         operating: "{{ oper_state }}"
#   shared: True
#
# - example: admin state is up, Dedicated Interface
#   getval: 'admin state is (?P<admin_state>\S+)'
#   result:
#     "{{ name }}":
#         name: "{{ name }}"
#         state:
#         admin: "{{ admin_state }}"
#
# - example: "  Hardware: Ethernet, address: 0000.5E00.5301 (bia 0000.5E00.5301)"
#   getval: '\s+Hardware: (?P<hardware>.*), address: (?P<mac>\S+)'
#   result:
#     "{{ name }}":
#         hardware: "{{ hardware }}"
#         mac_address: "{{ mac }}"

- name: Run command and parse with native
  ansible.netcommon.cli_parse:
    command: "show interface"
    parser:
      name: ansible.netcommon.native
    set_fact: interfaces_fact


- name: Pass text and template_path
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
      name: ansible.netcommon.native
      template_path: "{{ role_path }}/templates/nxos_show_interface.yaml"


# Using the ntc_templates parser

# -------------
# The ntc_templates use 'vendor_platform' for the file name
# it will be derived from ansible_network_os if not provided
# e.g. cisco.ios.ios => cisco_ios

- name: Run command and parse with ntc_templates
  ansible.netcommon.cli_parse:
    command: "show interface"
    parser:
      name: ansible.netcommon.ntc_templates
  register: parser_output

- name: Pass text and command
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
      name: ansible.netcommon.ntc_templates
      command: show interface
  register: parser_output


# Using the pyats parser

# -------------
# The pyats parser uses 'os' to locate the appropriate parser
# it will be derived from ansible_network_os if not provided
# in the case of pyats: cisco.ios.ios => iosxe

- name: Run command and parse with pyats
  ansible.netcommon.cli_parse:
    command: "show interface"
    parser:
        name: ansible.netcommon.pyats
  register: parser_output

- name: Pass text and command
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
        name: ansible.netcommon.pyats
        command: show interface
  register: parser_output

- name: Provide an OS to pyats to use an ios parser
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
        name: ansible.netcommon.pyats
        command: show interface
        os: ios
  register: parser_output


# Using the textfsm parser

# -------------
# templates/nxos_show_version.textfsm
#
# Value UPTIME ((\d+\s\w+.s.,?\s?){4})
# Value LAST_REBOOT_REASON (.+)
# Value OS (\d+.\d+(.+)?)
# Value BOOT_IMAGE (.*)
# Value PLATFORM (\w+)
#
# Start
#   ^\s+(NXOS: version|system:\s+version)\s+${OS}\s*$$
#   ^\s+(NXOS|kickstart)\s+image\s+file\s+is:\s+${BOOT_IMAGE}\s*$$
#   ^\s+cisco\s+${PLATFORM}\s+[cC]hassis
#   ^\s+cisco\s+Nexus\d+\s+${PLATFORM}
#   # Cisco N5K platform
#   ^\s+cisco\s+Nexus\s+${PLATFORM}\s+[cC]hassis
#   ^\s+cisco\s+.+-${PLATFORM}\s*
#   ^Kernel\s+uptime\s+is\s+${UPTIME}
#   ^\s+Reason:\s${LAST_REBOOT_REASON} -> Record

- name: Run command and parse with textfsm
  ansible.netcommon.cli_parse:
    command: "show version"
    parser:
      name: ansible.netcommon.textfsm
  register: parser_output

- name: Pass text and command
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
      name: ansible.netcommon.textfsm
      command: show version
  register: parser_output

# Using the ttp parser

# -------------
# templates/nxos_show_interface.ttp
#
# {{ interface }} is {{ state }}
# admin state is {{ admin_state }}{{ ignore(".*") }}

- name: Run command and parse with ttp
  ansible.netcommon.cli_parse:
    command: "show interface"
    parser:
      name: ansible.netcommon.ttp
    set_fact: new_fact_key

- name: Pass text and template_path
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
      name: ansible.netcommon.ttp
      template_path: "{{ role_path }}/templates/nxos_show_interface.ttp"
  register: parser_output

# Using the XML parser

# -------------
- name: Run command and parse with xml
  ansible.netcommon.cli_parse:
    command: "show interface | xml"
    parser:
      name: ansible.netcommon.xml
  register: parser_output

- name: Pass text and parse with xml
  ansible.netcommon.cli_parse:
    text: "{{ previous_command['stdout'] }}"
    parser:
      name: ansible.netcommon.xml
  register: parser_output

Возвращаемые значения

Общие возвращаемые значения описаны здесь, следующие поля уникальны для этого модуля:

Ключ Возвращаемое Описание
parsed
словарь
всегда
Структурированные данные, полученные в результате парсинга текста

stdout
строка
при задании команды
Вывод команды, запущенной на хосте

stdout_lines
список / элементы=строка
при задании команды
Вывод команды, запущенной на хосте, разделенный на строки



Авторы

  • Bradley Thornton (@cidrblock)

© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/netcommon/cli_parse_module.html

Spec-Zone.ru

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