ansible.netcommon.netconf_config – конфигурация устройства netconf
Примечание
Этот плагин входит в коллекцию ansible.netcommon (версия 1.5.0).
Для его установки используйте: ansible-galaxy collection install ansible.netcommon.
Для использования в плейбуке, укажите: ansible.netcommon.netconf_config.
Добавлено в версии 1.0.0: модуля ansible.netcommon
Обзор
- Netconf — это протокол управления сетями, разработанный и стандартизированный IETF. Он документирован в RFC 6241.
- Этот модуль позволяет пользователю отправлять файл конфигурации XML на устройство netconf и определяет, были ли изменения в конфигурации.
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- ncclient
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| backup boolean |
| Этот аргумент заставит модуль создать полную резервную копию текущего running-config с удаленного устройства перед внесением каких-либо изменений. Если значение backup_options не указано, файл резервной копии записывается в папку backup в корневом каталоге playbook или корневом каталоге роли, если playbook является частью роли ansible. Если каталог не существует, он создается. | |
| backup_options словарь | Это объект типа dict, содержащий настраиваемые параметры, связанные с путём к файлу резервной копии. Значение этого параметра считывается только когда backup установлено в да, если backup установлено в нет, этот параметр будет проигнорирован. | ||
| dir_path путь | Этот параметр предоставляет путь, заканчивающийся именем каталога, в котором будет храниться файл конфигурации резервной копии. Если каталог не существует, он будет сначала создан, а имя файла — это либо значение filename, либо имя файла по умолчанию, как описано в описании параметров filename. Если значение пути не указано, в текущей рабочей директории будет создан каталог backup, и конфигурация резервной копии будет скопирована в filename в каталоге backup. | ||
| filename строка | Имя файла, используемого для хранения конфигурации резервной копии. Если имя файла не указано, оно будет сгенерировано на основе имени хоста, текущего времени и даты в формате <имя_хоста>_config.<дата>@<время> | ||
| commit boolean |
| Этот флаг boolean контролирует, должны ли изменения конфигурации быть сохранены или нет после редактирования целевого хранилища данных. Этот параметр поддерживается только в том случае, если удаленный сервер Netconf поддерживает возможность :candidate. Если значение установлено в False, коммит не будет выполнен после операции edit-config, и пользователю необходимо явно выполнить коммит или отменить изменения. | |
| confirm целое число | Значение по умолчанию: 0 | Этот аргумент настраивает значение таймаута для подтверждения коммита, прежде чем он будет автоматически отменён. Если аргумент confirm_commit установлен в False, этот аргумент будет проигнорирован. Если значение этого аргумента установлено в 0, коммит подтверждается немедленно. Удаленный хост ДОЛЖЕН поддерживать возможности :candidate и :confirmed-commit для того, чтобы этот параметр работал. | |
| confirm_commit boolean |
| Этот аргумент выполнит операцию коммита на удалённом устройстве. Его можно использовать для подтверждения предыдущего коммита. | |
| content сырой | Данные конфигурации, определённые моделями данных устройства, значение может быть в формате xml-строки, текстовом формате или представлении python-словаря в формате JSON. В случае JSON-строки она будет преобразована в соответствующую xml-строку с помощью библиотеки xmltodict перед отправкой на удалённый хост. В случае значения этого параметра в формате текст формат должен поддерживаться удалённым сервером Netconf. Если значение параметра content в формате xml, в этом случае значение xml должно иметь config в качестве корневого тега.алиасы: xml | ||
| default_operation строка |
| Операция по умолчанию для rpc <edit-config>, допустимые значения — merge, replace и none. Если значение по умолчанию — merge, данные конфигурации в параметре content объединяются на соответствующем уровне в хранилище данных target. Если значение — replace, данные в параметре content полностью заменяют конфигурацию в хранилище данных target. Если значение — none, хранилище данных target не затрагивается конфигурацией в параметре config, если только входящие данные конфигурации не используют операцию operation для запроса другой операции. | |
| delete boolean |
| Инструктирует модуль удалить конфигурацию из хранилища данных, указанного в target. | |
| error_option строка |
| Этот параметр контролирует действие сервера netconf после возникновения ошибки при редактировании конфигурации. Если error_option=остановка_при_ошибке, прервать редактирование конфигурации при первой ошибке. Если error_option=продолжение_при_ошибке, продолжить обработку данных конфигурации при ошибке. Ошибка записывается, и генерируется отрицательный ответ, если какие-либо ошибки возникнут. Если error_option=откат_при_ошибке, откатиться к исходной конфигурации, если произошла ошибка. Это требует от удалённого сервера Netconf поддержки возможности error_option=откат_при_ошибке. | |
| format строка |
| Формат конфигурации, предоставляемый как значение content. В случае JSON-строки она будет преобразована в соответствующую xml-строку с помощью библиотеки xmltodict перед отправкой на удалённый хост. В случае формата текст формат должен поддерживаться удалённым сервером Netconf. Если значение параметра format не указано, то пытается определить формат данных параметра content как один из xml, json или текст.Если формат данных не определён, он устанавливается по умолчанию в xml. | |
| get_filter сырой | Этот аргумент указывает XML-строку, которая действует как фильтр, ограничивающий части данных, извлечённых с удалённого устройства при сравнении состояния до и после устройства после вызовов edit_config. Если не указано, возвращаются все данные конфигурации или состояния для сравнения в зависимости от значения параметра source. Значение get_filter может быть либо XML-строкой, либо XPath, либо JSON-строкой, либо собственным python-словарями. Если фильтр в формате XPath, сервер NETCONF на удалённом хосте должен поддерживать возможность xpath, иначе это приведёт к ошибке. | ||
| host строка | Указывает имя хоста DNS или адрес для подключения к удалённому устройству по указанному транспорту. Значение host используется в качестве целевого адреса для транспорта. | ||
| hostkey_verify boolean |
| Если установлено в yes, ключ хоста ssh устройства должен совпадать с ключом ssh, присутствующим на хосте. Если установлено в no, ключ хоста ssh устройства не проверяется. | |
| lock строка |
| Инструктирует модуль явно заблокировать хранилище данных, указанное как target. Установив значение всегда, он явно заблокирует хранилище данных, указанное в параметре target. Если значение — никогда, хранилище данных target не будет заблокировано. Значение если_поддерживается блокирует хранилище данных target только в том случае, если оно поддерживается удалённым сервером Netconf. | |
| look_for_keys boolean |
| Включает поиск ключей ssh в стандартных расположениях (например, :file:`~/.ssh/id_*`) | |
| password строка | Указывает пароль для аутентификации подключения к удалённому устройству. Это значение используется для аутентификации сеанса SSH. Если значение не указано в задаче, будет использовано значение переменной окружения ANSIBLE_NET_PASSWORD. | ||
| port целое число | Значение по умолчанию: 830 | Указывает порт для подключения к удалённому устройству. Значение порта по умолчанию — 830. | |
| save boolean |
| Аргумент save инструктирует модуль сохранить конфигурацию в хранилище данных target в startup-config, если она была изменена и если сервер Netconf поддерживает возможность :startup. | |
| source_datastore строка | Имя хранилища данных конфигурации, используемого в качестве источника для копирования конфигурации в хранилище данных, указанное параметром target. Значения могут быть running, candidate, startup или удалённым URL.алиасы: source | ||
| src путь | Указывает путь к исходному xml-файлу, содержащему конфигурацию или шаблон конфигурации для загрузки. Путь к исходному файлу может быть полным путём на хосте Ansible или относительным путём от корневой директории playbook или роли. Этот аргумент взаимоисключающий с xml. | ||
| ssh_keyfile путь | Указывает SSH-ключ для аутентификации подключения к удалённому устройству. Это путь к ключу, используемому для аутентификации сеанса SSH. Если значение не указано в задаче, будет использовано значение переменной окружения ANSIBLE_NET_SSH_KEYFILE. | ||
| target string |
| Имя конфигурационного хранилища данных для редактирования. - auto, использует candidate и fallback к running - candidate, редактирует хранилище данных <candidate/> и затем производит коммит - running, непосредственно редактирует хранилище данных <running/> псевдонимы: datastore | |
| timeout integer | По умолчанию: 10 | Устанавливает таймаут в секундах для связи с сетевым устройством при подключении или отправке команд. Если таймаут истекает до завершения операции, модуль выдаст ошибку. | |
| username string | Настраивает имя пользователя для аутентификации подключения к удалённому устройству. Это значение используется для аутентификации сеанса SSH. Если значение не указано в задаче, будет использовано значение переменной среды ANSIBLE_NET_USERNAME. | ||
| validate boolean |
| Этот флаг boolean, если установлен, проверяет содержимое хранилища данных, указанного в параметре target. Для работы этого параметра удалённый сервер Netconf должен поддерживать возможность :validate. | |
Примечания
Примечание
- Данный модуль требует, чтобы служба netconf была включена на удалённом управляемом устройстве.
- Этот модуль поддерживает устройства с и без возможностей candidate и confirmed-commit. Он всегда будет использовать более безопасную функцию.
- Этот модуль поддерживает использование connection=netconf
- Дополнительную информацию об использовании netconf см. в руководстве Platform Options, использующих Netconf
- Дополнительную информацию об использовании Ansible для управления сетевыми устройствами см. в Руководстве по сетям Ansible
- Этот модуль поддерживается на сетевых платформах
ansible_network_os. Подробности см. в Параметрах сетевой платформы.
Примеры
- name: use lookup filter to provide xml configuration
ansible.netcommon.netconf_config:
content: "{{ lookup('file', './config.xml') }}"
- name: set ntp server in the device
ansible.netcommon.netconf_config:
content: |
<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
<system xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
<ntp>
<enabled>true</enabled>
<server>
<name>ntp1</name>
<udp><address>127.0.0.1</address></udp>
</server>
</ntp>
</system>
</config>
- name: wipe ntp configuration
ansible.netcommon.netconf_config:
content: |
<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
<system xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
<ntp>
<enabled>false</enabled>
<server operation="remove">
<name>ntp1</name>
</server>
</ntp>
</system>
</config>
- name: configure interface while providing different private key file path (for connection=netconf)
ansible.netcommon.netconf_config:
backup: yes
register: backup_junos_location
vars:
ansible_private_key_file: /home/admin/.ssh/newprivatekeyfile
- name: configurable backup path
ansible.netcommon.netconf_config:
backup: yes
backup_options:
filename: backup.cfg
dir_path: /home/user
- name: "configure using direct native format configuration (cisco iosxr)"
ansible.netcommon.netconf_config:
format: json
content: {
"config": {
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": {
"active": "act",
"description": "test for ansible Loopback999",
"interface-name": "Loopback999"
}
}
}
}
get_filter: {
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": null
}
}
- name: "configure using json string format configuration (cisco iosxr)"
ansible.netcommon.netconf_config:
format: json
content: |
{
"config": {
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": {
"active": "act",
"description": "test for ansible Loopback999",
"interface-name": "Loopback999"
}
}
}
}
get_filter: |
{
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": null
}
}
# Make a round-trip interface description change, diff the before and after
# this demonstrates the use of the native display format and several utilities
# from the ansible.utils collection
- name: Define the openconfig interface filter
set_fact:
filter:
interfaces:
"@xmlns": "http://openconfig.net/yang/interfaces"
interface:
name: Ethernet2
- name: Get the pre-change config using the filter
ansible.netcommon.netconf_get:
source: running
filter: "{{ filter }}"
display: native
register: pre
- name: Update the description
ansible.utils.update_fact:
updates:
- path: pre.output.data.interfaces.interface.config.description
value: "Configured by ansible {{ 100 | random }}"
register: updated
- name: Apply the new configuration
ansible.netcommon.netconf_config:
content:
config:
interfaces: "{{ updated.pre.output.data.interfaces }}"
- name: Get the post-change config using the filter
ansible.netcommon.netconf_get:
source: running
filter: "{{ filter }}"
display: native
register: post
- name: Show the differences between the pre and post configurations
ansible.utils.fact_diff:
before: "{{ pre.output.data|ansible.utils.to_paths }}"
after: "{{ post.output.data|ansible.utils.to_paths }}"
# TASK [Show the differences between the pre and post configurations] ********
# --- before
# +++ after
# @@ -1,11 +1,11 @@
# {
# - "@time-modified": "2020-10-23T12:27:17.462332477Z",
# + "@time-modified": "2020-10-23T12:27:21.744541708Z",
# "@xmlns": "urn:ietf:params:xml:ns:netconf:base:1.0",
# "interfaces.interface.aggregation.config['fallback-timeout']['#text']": "90",
# "interfaces.interface.aggregation.config['fallback-timeout']['@xmlns']": "http://arista.com/yang/openconfig/interfaces/augments",
# "interfaces.interface.aggregation.config['min-links']": "0",
# "interfaces.interface.aggregation['@xmlns']": "http://openconfig.net/yang/interfaces/aggregate",
# - "interfaces.interface.config.description": "Configured by ansible 56",
# + "interfaces.interface.config.description": "Configured by ansible 67",
# "interfaces.interface.config.enabled": "true",
# "interfaces.interface.config.mtu": "0",
# "interfaces.interface.config.name": "Ethernet2",
Возвращаемые значения
Общие возвращаемые значения описаны в этом разделе. Следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| backup_path string | при backup = yes | Полный путь к резервной копии файла Пример: /playbooks/ansible/backup/config.2016-07-16@22:28:34 |
| diff dictionary | при включенном diff | Если опция --diff включена во время выполнения, изменения конфигурации до и после возвращаются в качестве ключей before и after. Пример: {'after': '<rpc-reply> <data> <configuration> <version>17.3R1.10</version>...<--snip-->', 'before': '<rpc-reply> <data> <configuration> <version>17.3R1.10</version>...<--snip-->'} |
| server_capabilities list / elements=string | успешно | список возможностей сервера Пример: ['urn:ietf:params:netconf:base:1.1', 'urn:ietf:params:netconf:capability:confirmed-commit:1.0', 'urn:ietf:params:netconf:capability:candidate:1.0'] |
Авторы
- Leandro Lisboa Penz (@lpenz)
- Ganesh Nalawade (@ganeshrn)
© 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/netconf_config_module.html