Spec-Zone.ru › Ansible

Выполните первую команду и плейбук

Примените полученные знания на практике с помощью этого краткого руководства. Установите 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. В плейбуке можно сохранить многие параметры, заданные флагами в командной строке, чтобы вводить меньше данных. Для этого понадобятся два файла: плейбук и файл инвентарного списка.

  1. Скачайте 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 позволяет просмотреть результаты в оболочке.

  1. Запустите плейбук с помощью команды:
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"
}
  1. Теперь, когда вы умеете получать конфигурацию устройства, попробуйте обновить ее с помощью 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

Spec-Zone.ru

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