Выполните первую команду и плейбук
Примените полученные знания на практике с помощью этого краткого руководства. Установите Ansible, вручную выполните команду настройки сети, выполните ту же команду с помощью Ansible, а затем создайте плейбук, чтобы запускать эту команду в любое время на нескольких сетевых устройствах.
- Предварительные требования
- Установка Ansible
- Установите ручное подключение к управляемому узлу
- Выполните первую сетевую команду Ansible
- Создайте и запустите первый сетевой плейбук Ansible
- Сбор фактов с сетевых устройств
Предварительные требования
Перед началом работы с этим руководством вам понадобятся:
- Установленная Ansible 2.10 (или более поздняя версия)
- Одно или несколько сетевых устройств, совместимых с Ansible
- Базовые знания командной строки Linux
- Базовые знания настройки сетевых коммутаторов и маршрутизаторов
Установка Ansible
Установите Ansible удобным для вас способом. См. раздел Установка Ansible. Затем вернитесь к этому руководству.
Убедитесь, что версия Ansible соответствует требованиям (должна быть >= 2.10):
ansible --version
Установите ручное подключение к управляемому узлу
Чтобы проверить учетные данные, вручную подключитесь к сетевому устройству и получите его конфигурацию. Замените пример имени пользователя и устройства своими реальными учетными данными. Например, для маршрутизатора VyOS:
ssh my_vyos_user@vyos.example.net show config exit
Это ручное подключение также позволяет проверить подлинность сетевого устройства, добавив отпечаток его RSA-ключа в список известных узлов. (Если вы уже подключались к устройству, его подлинность уже была проверена.)
Выполните первую сетевую команду Ansible
Вместо того чтобы вручную подключаться к сетевому устройству и выполнять на нем команду, вы можете получить его конфигурацию с помощью одной упрощенной команды Ansible:
ansible all -i vyos.example.net, -c ansible.netcommon.network_cli -u my_vyos_user -k -m vyos.vyos.vyos_facts -e ansible_network_os=vyos.vyos.vyos
- Флаги этой команды задают семь значений:
-
- группу узлов, к которой должна применяться команда (в данном случае — все)
- инвентарный список (-i, целевое устройство или устройства; без завершающей запятой -i указывает на файл инвентарного списка)
- способ подключения (-c, метод подключения и выполнения Ansible)
- пользователя (-u, имя пользователя для SSH-подключения)
- способ SSH-подключения (-k, запрос пароля)
- модуль (-m, модуль Ansible для запуска с использованием полного квалифицированного имени коллекции (FQCN))
- дополнительную переменную (-e, в данном случае задающую значение сетевой ОС)
ПРИМЕЧАНИЕ: Если вы используете ssh-agent с ключами SSH, Ansible загружает их автоматически. Флаг -k можно не указывать.
Примечание
Если Ansible запущена в виртуальном окружении, необходимо также добавить переменную ansible_python_interpreter=/path/to/venv/bin/python
Создайте и запустите первый сетевой плейбук Ansible
Если вы хотите запускать эту команду каждый день, сохраните ее в плейбуке и запускайте его с помощью ansible-playbook вместо ansible. В плейбуке можно сохранить многие параметры, заданные флагами в командной строке, чтобы вводить меньше данных. Для этого понадобятся два файла: плейбук и файл инвентарного списка.
- Скачайте
first_playbook.yml, который выглядит так:
---
- name: Network Getting Started First Playbook
connection: ansible.netcommon.network_cli
gather_facts: false
hosts: all
tasks:
- name: Get config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
В плейбуке заданы три из семи значений, указанных выше в командной строке: группа (hosts: all), способ подключения (connection: ansible.netcommon.network_cli) и модуль (в каждой задаче). Поскольку эти значения заданы в плейбуке, их можно не указывать в командной строке. В плейбук также добавлена вторая задача, выводящая конфигурацию. При запуске модуля в плейбуке результат сохраняется в памяти для использования последующими задачами, а не выводится в консоль. Задача debug позволяет просмотреть результаты в оболочке.
- Запустите плейбук с помощью команды:
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml
Плейбук содержит один сценарий с двумя задачами и должен вывести примерно следующее:
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml
PLAY [Network Getting Started First Playbook]
***************************************************************************************************************************
TASK [Get config for VyOS devices]
***************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the config]
***************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The hostname is vyos and the OS is VyOS 1.1.8"
}
- Теперь, когда вы умеете получать конфигурацию устройства, попробуйте обновить ее с помощью Ansible. Скачайте
first_playbook_ext.yml— расширенную версию первого плейбука:
---
- name: Network Getting Started First Playbook Extended
connection: ansible.netcommon.network_cli
gather_facts: false
hosts: all
tasks:
- name: Get config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
- name: Update the hostname
vyos.vyos.vyos_config:
backup: yes
lines:
- set system host-name vyos-changed
- name: Get changed config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the changed config
debug:
msg: "The new hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
Расширенный первый плейбук содержит пять задач в одном сценарии. Запустите его той же командой, что и выше. В выводе показаны изменения конфигурации, внесенные Ansible:
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml
PLAY [Network Getting Started First Playbook Extended]
************************************************************************************************************************************
TASK [Get config for VyOS devices]
**********************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The hostname is vyos and the OS is VyOS 1.1.8"
}
TASK [Update the hostname]
*************************************************************************************************************************************
changed: [vyos.example.net]
TASK [Get changed config for VyOS devices]
*************************************************************************************************************************************
ok: [vyos.example.net]
TASK [Display the changed config]
*************************************************************************************************************************************
ok: [vyos.example.net] => {
"msg": "The new hostname is vyos-changed and the OS is VyOS 1.1.8"
}
PLAY RECAP
************************************************************************************************************************************
vyos.example.net : ok=5 changed=1 unreachable=0 failed=0
Сбор фактов с сетевых устройств
Ключевое слово gather_facts теперь поддерживает сбор фактов о сетевых устройствах в стандартизированных парах ключ/значение. Эти сетевые факты можно использовать в последующих задачах для управления сетевым устройством.
Также можно использовать новый параметр gather_network_resources с сетевыми модулями *_facts (например, arista.eos.eos_facts), чтобы возвращать только часть конфигурации устройства, как показано ниже.
- hosts: arista
gather_facts: True
gather_subset: interfaces
module_defaults:
arista.eos.eos_facts:
gather_network_resources: interfaces
Плейбук возвращает следующие факты об интерфейсе:
"network_resources": {
"interfaces": [
{
"description": "test-interface",
"enabled": true,
"mtu": "512",
"name": "Ethernet1"
},
{
"enabled": true,
"mtu": "3000",
"name": "Ethernet2"
},
{
"enabled": true,
"name": "Ethernet3"
},
{
"enabled": true,
"name": "Ethernet4"
},
{
"enabled": true,
"name": "Ethernet5"
},
{
"enabled": true,
"name": "Ethernet6"
},
]
}
Обратите внимание: gather_network_resources представляет данные конфигурации в виде фактов для всех поддерживаемых ресурсов (интерфейсов, bgp, ospf и т. д.), тогда как gather_subset в основном используется для получения оперативных данных.
Эти факты можно сохранить и напрямую использовать в другой задаче, например, с модулем ресурсов eos_interfaces.
© 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/getting_started/first_playbook.html