Pull to refresh

Администрирование коммутаторов Juniper с помощью Ansible

Reading time3 min
Views7.9K
Все началось с задачи создать некоторое количество vlan на пачке коммутаторов, а делать это вручуню совсем не хотелось. Знающие люди посоветовали использовать Ansible. На мануал не претендует, так как опыта использования пока не много, но тем, что получилось, хочу поделиться. Конструктивная критика, замечания и пожелания приветствуются.



Подробности под катом.

Установка


Установка на Centos довольно простая.

yun install ansible

Дальше нужно установить модули от Juniper для Ansible, тут команде Juniper отдельное спасибо.

ansible-galaxy install Juniper.junos

Проверить установленные модули можно командой.

ansible-galaxy list

После установки можно проверить версию

ansible --version
ansible 2.3.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

В файле конфигурации ansible.cfg определены путь к файлу логов и списку устройств, а также опция, отключающая проверку SSH ключей в локальном хранилище при подключении к коммутатору:

[defaults]
inventory      = /etc/ansible/hosts
host_key_checking = False
log_path = /var/log/ansible.log

Список устройств лежит в файле hosts. Хосты можно группировать, группы могут быть членами других групп:

[testswitches]
#SWTEST
192.168.8.192
#SWAC_0901
192.168.8.218

[prodswitches]
#SWAC_1301
192.168.8.81
#SWAC_1302
192.168.8.82

[allswitches:children]
testswitches
prodswitches

Внесение изменений в конфигурацию коммутатора


Нужно создать ansible playbook — сценарий, по которому Ansible будет выполнять определенные действия. Первый playbook для внесения изменений в конфигурацию коммутаторов — changeconfig.yml. Просто создаем пустой файл с расширением yml:

#playbook начинается с ---
---
#задаем имя
- name: Juniper Config Changes
#группа хостов, к которым будет применяться playbook
  hosts: testswitches
#роль, которая будет использоватья - это библиотека от Juniper, которую установили ранее
  roles:
  - Juniper.junos
  connection: local
  gather_facts: no
#тут даем ссылку на интерпретатор Python, если в системе было установлено несколько версий
  vars:
    ansible_python_interpreter: /usr/bin/python
#чтобы не хранить креденшелс в файле, их можно вводить при запуске playbook
  vars_prompt:
  - name: USERNAME
    prompt: Username
    private: no
  - name: PASSWORD
    prompt: Password
    private: yes
#дальше описываем задачу, которую нужно сделать
#timeout увеличен до 120 сек, потому что после commit старые EX2200 некоторое время думают, за это время сессия отваливалась
  tasks:
  - name: Retrieve information from devices running Junos OS
    junos_config:
      host: "{{ inventory_hostname }}"
      username: "{{ USERNAME }}"
      password: "{{ PASSWORD }}"
      timeout: 120
      port: 22
#перечисляем команды так, как бы мы их вносили на самом коммутаторе
      lines:
        - delete interfaces vme unit 0 family inet dhcp
        - set vlans vlan10 description "TestVlan"
        - set vlans vlan10 vlan-id 10

Запускаем playbook командой ansible-playbook changeconfig.yml

Username: admin
Password:
PLAY [Juniper Config Changes] **********************************************
TASK [Retrieve information from devices running Junos OS] 
ok: [192.168.8.218]
changed: [192.168.8.192]
PLAY RECAP ******************************************************
192.168.8.192              : ok=1    changed=1    unreachable=0    failed=0
192.168.8.218              : ok=1    changed=0    unreachable=0    failed=0

Я немного почистил вывод, но в целом, ok показывает, что подключение прошло успешно, changed=1 — что изменения внесены на коммутатор. На 192.168.8.218 нужный влан уже был

Перед запуском можно протестировать, какие именно изменения будут внесены. Для этого нужно запустить команду с параметром ansible-playbook changeconfig.yml -bDC

В логе будут показаны вносимые изменения, но фактически они не будут применены, ключ С позволяет сделать проверку, а bD покажет разницу. В примере ниже на одном из свичей был дескрипшен для влана 10 с именем SRV, ansible его удалит и добавит новый а также создаст сам влан.

*
[edit vlans vlan10]
-   description SRV;
+   description "TestVlan";
+   vlan-id 10;

changed: [192.168.8.192]
ok: [192.168.8.218]


Сбор информации с коммутаторов


Еще один Playbook показывает, как собрать нужные данные с коммутаторов и сохранить результаты в локальный файл. Меня интересовала версия Junos. Ниже я приведу только часть tasks, все, что выше, аналогично предыдущему playbook

  tasks:
  - name: Retrieve information from devices running Junos OS
    junos_command:
      host: "{{ inventory_hostname }}"
      username: "{{ USERNAME }}"
      password: "{{ PASSWORD }}"
      timeout: 120
      port: 22
      commands:
        - show version
#тут мы регистрируем переменную, в которую будет все выводиться, в дебаге можно посмотреть ее структуру и сохранить в файл интересующее поле
    register: printout
  - name: Save Output
#debug: msg="{{printout.stdout_lines}}"
    lineinfile:
      path: versions.log
      create: yes
      line: "{{printout.stdout_lines}}"

Для отладки можно запускать playbook командой ansible-playbook -vvv getversion.yml
Также все логи будут лежать в указанном в конфиге /var/log/ansible.log

В целом Ansible мне понравился, буду осваивать дальше, благодарю за внимание.
Tags:
Hubs:
Total votes 6: ↑5 and ↓1+4
Comments6

Articles