ansible.utils.cli_parse – Парсинг вывода командной строки или текста с помощью различных парсеров
Примечание
Этот плагин является частью коллекции ansible.utils (версия 2.0.0).
Для его установки используйте: ansible-galaxy collection install ansible.utils.
Чтобы использовать его в книге задач, укажите: ansible.utils.cli_parse.
Новое в версии 1.0.0: модуля ansible.utils
Обзор
- Парсинг вывода командной строки или текста с помощью различных парсеров
Примечание
Данный модуль имеет соответствующий плагин действий.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| command строка | Команда, которая должна быть выполнена на хосте | ||
| parser словарь / обязательный | Параметры, специфичные для парсера | ||
| command строка | Команда, используемая для поиска шаблона парсера | ||
| name строка / обязательный | Имя используемого парсера | ||
| os строка | Предоставление значения операционной системы парсеру Для парсера `ntc_templates` это значение должно быть в формате `<vendor>_<os>`. | ||
| template_path строка | Путь к шаблону парсера на контроллере Ansible Это может быть относительный или абсолютный путь | ||
| vars словарь | Дополнительные параметры, специфичные для парсера Примеры параметров, специфичных для парсера, см. в руководстве пользователя cli_parse | ||
| 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 и документацию парсера
- Некоторые парсеры требуют установки сторонних библиотек Python на контрольном узле Ansible и определенной версии 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.utils.cli_parse:
command: "show interface"
parser:
name: ansible.netcommon.native
set_fact: interfaces_fact
- name: Pass text and template_path
ansible.utils.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
# example cisco.ios.ios => cisco_ios
- name: Run command and parse with ntc_templates
ansible.utils.cli_parse:
command: "show interface"
parser:
name: ansible.netcommon.ntc_templates
register: parser_output
- name: Pass text and command
ansible.utils.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.utils.cli_parse:
command: "show interface"
parser:
name: ansible.netcommon.pyats
register: parser_output
- name: Pass text and command
ansible.utils.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.utils.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.utils.cli_parse:
command: "show version"
parser:
name: ansible.utils.textfsm
register: parser_output
- name: Pass text and command
ansible.utils.cli_parse:
text: "{{ previous_command['stdout'] }}"
parser:
name: ansible.utils.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.utils.cli_parse:
command: "show interface"
parser:
name: ansible.utils.ttp
set_fact: new_fact_key
- name: Pass text and template_path
ansible.utils.cli_parse:
text: "{{ previous_command['stdout'] }}"
parser:
name: ansible.utils.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.utils.cli_parse:
command: "show interface | xml"
parser:
name: ansible.utils.xml
register: parser_output
- name: Pass text and parse with xml
ansible.utils.cli_parse:
text: "{{ previous_command['stdout'] }}"
parser:
name: ansible.utils.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/utils/cli_parse_module.html