Запуск первого командного файла и книги по практикам
Примените полученные знания на практике с помощью этого краткого руководства. Установите 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 [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 [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"
}
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_subset: interfaces.
Вы можете сохранить эти факты и использовать их непосредственно в другом задании, например, с модулем ресурса eos_interfaces.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/network/getting_started/first_playbook.html