Налаштування комутаторів на базі Cisco IOS за допомогою ansible
Слава Україні! Я Андрій Б., працюю техніком-звʼязку (раніше DevOps Engineer), займаюсь автоматизацією інфрастуктури, моніторингом та підтримкою користувачів.
У нас є певна кількість комутаторів Cisco (типу 2960) і для того щоб додати новий комутатор чи замінити існуючий на інший — зазвичай просто копіюємо стару конфігурацію, та міняємо ті параметри які мають змінитись (ip, vlan, налаштування портів, тощо). Для автоматизації цього процесу пропоную використовувати такий інструмент як Ansible, на офіційній сторінці є детальний гайд як його встановити.
Наперед disclaimer — я не буду описувати та вдаватись у деталі чому саме таку конфігурацію ми використовуємо. Також для роботи з ansible ваш комутатор уже має бути попередньо налаштований, а саме: створений користувач з паролем та включений доступ по ssh (ми будемо прописувати його у конфігурації ansible). Це налаштування можна зробити через console port та спеціальний кабель, як поєднати доступ через console port та ansible я не знайшов.
Отож почнемо, вважаємо що ansible у вас вже становлено. Для робити з пристроями cisco встановлюємо Cisco IOS колекцію через команду ansible-galaxy collection install cisco.ios. На жаль вона не містить усіх модулів для налаштування, тому в деякій частині плейбуки будуть використовуватись спеціальні модулі, а частина налаштується просто через модуль ios_config.
Для того щоб ansible зміг підключитись до комутатора я використовую наступну конфігурацію в інвентарному файлі:
; hosts.ini [ios] SW_STAND ansible_host=10.10.1.10 [ios:vars] ansible_connection=ansible.netcommon.network_cli ansible_network_os=cisco.ios.ios ansible_network_cli_ssh_type=libssh ansible_libssh_user=ansible ansible_libssh_password=cisco ansible_user=ansible ansible_password=cisco ansible_become=yes ansible_become_method=enable ansible_become_password=cisco
тут для ansible_connection, ansible_network_os, та ansible_network_cli_ssh_type (замість libssh може бути paramiko, але у мене на одному комутаторі не відпрацьовує) вказуємо що будемо використовувати бібліотеку яка працює з ssh.
ansible_user, ansible_password — логін та пароль через якого ви будете підключатись до комутатора (ще раз наголошу що він має бути попередньо створений), параметри _libssh_ пропимуємо якщо використовуємо ssh_type=libssh, ansible_become_ параметри вказуємо що будемо в режимі конфігурації (enable mode). Пароль cisco я написав для прикладу, ви ж створюєте складний пароль та записуєте його у ansible vault.
По суті цього достатньо для запуску першої плейбуки, наприклад можемо витягнути версію комутатора та ПЗ:
# show-version.yaml --- - name: Get Cisco IOS Version hosts: ios gather_facts: no tasks: - name: Run 'show version' command cisco.ios.ios_command: commands: - show version register: show_version_output - name: Display IOS version debug: var: show_version_output.stdout_lines[0]
Запускаємо через командуansible-playbook -i hosts.ini show-version.yaml та бачимо результат.
Повністю конфігурацію я виклав у себе в репозиторії, пройдемось по пунтках які дозволяють налаштувати cisco.ios модулі, а все що можна налаштувати через ios_config пропускаємо, елементарно кожну строку конфігурації можемо у ньому прописати, наприклад:
— name: Configure hard-coded general settings
cisco.ios.ios_config:
lines: «{{ cisco_ios_always_lines }}»і у змінній cisco_ios_always_lines вказуємо те що нам потрібно. Проте є best practices, у яких вказано що варто використовувати готові модулі під задачу (якщо такі є), тому далі приклади що можна через них налаштувати, наприклад текст який буде показувати при логіні на комутатор:
- name: Configure the login banner
cisco.ios.ios_banner:
banner: login
text: "You are logged into {{ inventory_hostname }}."
state: presentАбо створюємо користувача для доступу по ssh private key (та не використовуємо логін/пароль).
- name: Configure ansible management user
cisco.ios.ios_user:
name: ansible
nopassword: true
sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
- name: Set ansible user privilege level 15
cisco.ios.ios_user:
aggregate:
- name: ansible
privilege: 15
state: present
Чи налаштовуємо SNMP v3 протокол для моніторингу комутаторів:
- name: Configure SNMP
cisco.ios.ios_snmp_server:
config:
groups:
- group: "{{ cisco_snmp_group }}"
acl_v4: 1
version: v3
version_option: priv
views:
- name: "{{ cisco_snmp_group }}"
family_name: iso
included: true
communities:
- acl_v4: 1
name: "{{ cisco_snmp_group }}"
rw: false
Також в кінці запускається запис конфігурації після ваших змін (можна закоментувати якщо ви не хочете щоб конфігурація зберігалась після перезапуску, корисно якщо щось тестуєте і не впевнені чи буде комутатор працювати правильно):
- name: Save running-config after setup cisco.ios.ios_config: save_when: modified
З мінусів використання модуля ios_config зазначу, що при налаштуванні портів не зберігається «консистентність» команд (і в логах так і пише що деякі конфігураційні параметри йдуть не по черзі як у конфігурації при виводі команди sh run ) та будуть світитись як CHANGED, але на загальне налаштування не впливають.
Пишіть у коментарях як ви автоматизовуєте мережеві пристрої та що ще додати у конфігурацію.

1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів