Найти в Дзене
BecomeSysa

Настройка ansible сети для самых маленьких (часть 1)

Сегодня будем проводить настройку Ansible в Альт Сервер 10.

Установка ansible
apt-get install -y ansible sshpass
Создание инвентаря
nano /etc/ansible/inventory
Создание групп и их участников в файле inventory

[Networking]
RTR-HQ ansible_host=192.168.1.1
RTR-BR ansible_host=192.168.2.1
[Servers]
SRV-HQ ansible_host=192.168.1.34
SRV-BR ansible_host=192.168.2.34
[Clients]
CLI-HQ ansible_host=192.168.1.66
CLI-BR ansible_host=192.168.2.66

Делаем наш инвентарный файл по умолчанию
nano /etc/ansible/ansible.cfg
найти и раскоментить / указать путь к своему инвентарному файлу

inventory = /etc/ansible/inventory
host_key_checking = false

Создание директории для переменных в каталоге ansible

cd /etc/ansible
mkdir group_vars

Создание переменных для групп описанных в инвентарном файле
# Для группы Networking
nano group_vars/Networking.yml

ansible_ssh_user: admin
ansible_ssh_pass: P@ssw0rd
ansible_connection: network_cli
ansible_network_os: ios

# Для группы Servers
nano groups_vars/Servers.yml

ansible_ssh_user: sshuser
ansible_ssh_port: 2023

# Для группы Clients:
nano group_vars/Clients.yml

ansible_ssh_user: root
ansible_ssh_pass: P@ssw0rd

# Для всех хостов

ansible_ssh_private_key_file: /root/.ssh/id_rsa
ansible_python_interpreter: /usr/bin/python3

Проверка подключения ко всем хостам
ansible -m ping all
Проверка имен всех хостов
ansible all -a "hostname"


Установка модуля pip необходимого для pylibssh
apt-get install python3-module-pip
# Установка pylibssh
pip3 install ansible-pylibssh
# Установка пакета cisco для eltex
ansible-galaxy collection install cisco.ios
# Редактирование пакета cisco для работы с eltex
nano /root/.ansible/collections/ansible_collecctions/cisco/ios/plugins/cliconf/ios.py

self.send_command("configure terminal") => self.send_command("configure")

nano /root/.ansible/collections/ansible_collections/cisco/ios/plugins/terminal/ios.py

self._exec_cli_command(b"terminal lenght 0") => self._exec_cli_command(b"terminal databump")

Создание плейбука
nano gathering.yml
Описание плейбука

- hosts: Clients, Servers
become: yes
gather_facts: no
tasks:
- name: create directory
file: path=/etc/ansible state=directory

- hosts: Clients, Servers
become: yes
tasks:
- name: output
copy:
content: "{{ansible_hostname}}.{{ansible_domain}} - {{ ansible_default_ipv4.address }}"
dest: /etc/ansible/{{ansible_hostname}}-output.yaml

- hosts: Clients, Servers
become: yes
tasks:
- name: copy files from remote to local
fetch:
src: /etc/ansible/{{ansible_hostname}}-output.yaml
dest: /etc/ansible/tmp
flat: true

- hosts: localhost
connection: network_cli
gather_facts: no
become: yes
var:
remove_strings: [has address]
tasks:
- name: output RTR-HQ
command: "host rtr-hq"
register: RTRHQ
- debug: var=RTRHQ

- copy:
content: "{{ RTRHQ.stdout | replace('\\n', '\n') }}"
dest: /etc/ansible/tmp/RTRHQ.out

- replace:
path: /etc/ansible/tmp/RTRHQ.out
regexp: '\b{{ item }}\b\s?'
replace: '- '
loop: "{{ remove_strings }}"

- name: output RTR-BR
command: "host rtr-br"
register: RTRBR
- debug: var=RTRBR

- copy:
content: "{{ RTRBR.stdout | replace('\\n', '\n') }}"
dest: /etc/ansible/tmp/RTRBR.out

- replace:
path: /etc/ansible/tmp/RTRBR.out
regexp: '\b{{ item }}\b\s?'
replace: '- '
loop: "{{ remove_strings }}"

- hosts: SRV-BR
become: yes
gather_facts: no
tasks:
- name: assemble
assemble:
src: /etc/ansible/tmp
dest: /etc/ansible/output.yaml

- hosts: SRV-BR
become: yes
gather_facts: no
tasks:
- name: delete remained files and directories
file:
path: /etc/ansible/tmp
state: absent

- file:
path: /etc/ansible/srv-br-output.yaml
state: absent

- hosts: Clients, SRV-HQ
become: yes
gather_facts: no
tasks:
- name: delete remained files and directories
file:
path: /etc/ansible
state: absent