
Подробности под катом.
Установка
Установка на 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 мне понравился, буду осваивать дальше, благодарю за внимание.

