Spec-Zone.ru › Ansible

Запуск вашей первой команды и playbook

Примените полученные знания на практике с помощью этого краткого учебного пособия. Установите Ansible, выполните команду конфигурации сети вручную, выполните ту же команду с помощью Ansible, затем создайте playbook, чтобы вы могли выполнять команду в любое время на нескольких устройствах сети.

  • Предварительные условия
  • Установка Ansible
  • Установление ручного подключения к управляемому узлу
  • Выполнение вашей первой команды Ansible для сети
  • Создание и выполнение первого playbook 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

Создание и выполнение первого playbook Ansible для сети

Если вы хотите выполнять эту команду ежедневно, вы можете сохранить её в playbook и запустить его с помощью ansible-playbook вместо ansible. Playbook может хранить многие параметры, которые вы предоставили с флагами в командной строке, оставляя меньше для ввода в командной строке. Для этого вам потребуются два файла — playbook и файл инвентаризации.

  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 }}"

Playbook устанавливает три из семи значений из командной строки выше: группу (hosts: all), метод подключения (connection: ansible.netcommon.network_cli) и модуль (в каждом задании). Установив эти значения в playbook, вы можете опустить их в командной строке. Playbook также добавляет второе задание для отображения вывода конфигурации. Когда модуль выполняется в playbook, вывод сохраняется в памяти для использования в будущих задачах вместо записи в консоль. Задание debug здесь позволяет отображать результаты в вашей оболочке.

  1. Запустите playbook с помощью команды:
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml

Playbook содержит один play с двумя заданиями и должен генерировать вывод, похожий на этот:

$ 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, который является расширенной версией первого playbook:
---

- 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 }}"

Расширенный первый playbook имеет пять задач в одном play. Запустите его с той же командой, что вы использовали выше. Вывод покажет вам изменения, внесённые 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

Playbook возвращает следующие фактические данные интерфейса:

"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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/network/getting_started/first_playbook.html

Spec-Zone.ru

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