Sobre Anibile.
O Anisible E UMA Ferramenta de Automação SEM Agente Que Gerencia Hosts Por Meio de Módulos Através Do Protocolo SSH (POR Padrão). UMA VEZ Instalado, O Anbible Pode Gerenciar Remoticamente, Ума Грандидада, outsidade de máquinas, partir de dum Servidor, OU Seja, Após Instalar o Anisible, O Servidor Irá Utilizar Ssh Para SE Comunicar Com OS Hosts RepaidiDos EM Sua Configuração.
Anbible Code Ser Instalado E Executado EM Qualkquer Máquina Com Sistema Emplational Baseado EM UNIX (Red Hat, Debian, Centos, Macos Equerquer UM DOS BSDS), Não Sendo Possível Utilizá-le EM Windows. É Thansária A Utilização do Python (Python 2 (Versão 2.7) OU Python 3 (Versão 3.5 E Superious)).
Sobre O Projeto.
NESTE POST IREMOS UTILIZAR O Ansible Para Rotinas de Backup de Ativos de Rede (сетевая автоматизация), PodeMOS UTILIZA-LO EMMA UMA REDE COM EQUIPARTOS DEVIVESASS MARCAS E MODELOS.
Neste Cenário Utilizaremos: Хозяин Anbible: Máquina windows, com wsl (подсистема Windows for linux), утилизандо "Ubuntu 20.04.1 lts"
Хозяин PARA Backup: Переключатель Cisco L3 (слой 3 - CAMADA 3)
Переключатель Huawei L2 (слой 2 - CAMADA 2)
ROTEDOR MIKROTIK
Роторник Huawei
Топология Утилизада
Instalando Anisible
Para Instalar O Anisible No Ubuntu, Iremos Atualizar o Sistema.
$ sudo apt update
Instalar Python e Anisible
$ sudo apt install python3 python3-pip python-utils ansible -y
Também PodeMos Instalar Através do Gerenciador de Pocotes Do Python, O PIP (COMO IREMOS TRABALHAR COM O Python3. , Instalaremos e Utilizaremos PIP3)
$ sudo apt install python3 python3-pip python-utils -y $ pip3 install ansible
OBS.: Durante O Processo de Criação e Testes, TiveMos UM PLUANCE COM A Versão делает Anbible. Нет Ambiente Ubuntu Após o início DOS Testes, Utilizamos a versão “Anbible 2.9.6” e Após Endão, Tudo Funcionou Coreetamente. SPOREDEMEME EM NOVOS TESTES EM NOVAS MáAKINAS UBUNTU E CONTOS, APOS A Instalação Do Anisible, Versão Instalada Foi A «Anisible 2.9.18», EO Mesmo Código Não Estava Funcionando, Após Diversas Pesquisas, Encontramos UM PLUANCE DE VERSãO APó o «Anisible 2.9 .7 “para huawei (ce_config) e Juniper (Junos_facts E Junos_Config), Para Correigir Este Flanea, Realizamos o Downgrade Da Versão Do Anisible.
Checando Versão Do Python, Pip E Anisible
$ python -V ou python --version $ python3 -V ou python3 --version $ ansible --version
Caso Prepise Saber Qual Python OU Ansible Está Utilizando
$ which python $ which python3 $ which ansible
Понижение понижению делает Anisible
$ pip install ansible==[version] $ pip3 install ansible==[version]
Exemplo:
$ pip install ansible==2.9.6 $ pip3 install ansible==2.9.6
Appós instalação e checagem das versões, Iremos Então Para A itilização Part Para itilização Partible EM Network Automation, EM Rotinas de Backup.
Para Este Projeto Utilizamos apenas dois arquivos: хозяев
Криандо Местный де Trabalho
Инауньдо, Криамам Хм Диреторио Нет Домашний пункт Осных ОС Arquivos:
Criaremos UM Diretório Para Trabalhar Com o Anisible.
$ mkdir ansible
Entraremos Нет Диреторио Криадо.
$ cd ansible
PARA CHECAGEM EM QUAL Diretório Estamos.
$ pwd
Criando O Arquivo Hosts E O Main.yml
$ touch hosts main.yml
LISTAMOS OS ARQUIVOS DENRO DO DO DEERETORIO
$ ls
Arquivo – Hosts Do Anbible
Primeiro Iremos TraTar O Arquivo Hosts, Neste Arquivo IremoS DEALAR OS Hosts Que Serão Realizados OS Backups de Forma Automática.
O Arquivo Hosts Obsui o Flattio ini ou yaml, Neste Projeto Iremos Utilizar o Formato ini.
Doctro Do Arquivo Hosts IneMoS Trabalhar Com Grupos, Идентификационные данные Атравес де Колшет “[]” E COM Variveis que irão DifeRenciar Características de Cada Grupo (Caso Cario).
[Все: Варс] – КРИАМАС ИС ГРУПО ДЕ «Вариавейс Глобайс» Que Serão Appleadas EM ToDos OS Hosts Que Não Toxuírem Variáveis Fairáveiss Exclusivamente. Este Grupo Não é Obrigatório, как Variáveis Podem FiCar “Soltas” No Topo do Arquivo, Mas PreditiMos Utilizar Este Formato Para Organizar O Arquivo.
Как Variáveis Utilizadas Neste Grupo São:
[all:vars] ansible_user=USER_HERE // Usuário ansible_password=USER_PASSWORD_HERE // Senha ansible_become=yes // Permite receber privilégios de "enable" ansible_become_password=USER_ROOT_PASSWORD_HERE // senha de "enable" ansible_become_method=enable // para informar ao sistema operacional o privilégio de "enable", para checagem de opções de become: "ansible-doc -t become -l" ansible_port=22 // Porta de conexão SSH aos hosts ansible_connection=network_cli // Plugin para acesso SSH aos hosts gather_facts=false // Coletar fatos sobre o host remoto
ОС Demais Grupos Foram Criados Para Cada Vendor/Marca de Equipamentos, OS NOMES FORAM ESCOLHIDOS PARA MELHOR Identialiedação e Agrupamento de Hosts: [Hosts_cisco], [Hosts_Huawei], [Hosts_Mikrotik].
PodeMoS DEALAR OS NOMES DOS HOSTS DE TRêS FOMPORTAS DINTINTAS, COMO MOSTRADAS ABAIXO, EM NOSSO ARQUIVO IREMOS UTILIZAR A FORMA 1:
1- Хозяемое имя
[hosts_cisco] SW_CISCO_01 ansible_host=10.0.0.1 [hosts_mikrotik] RT_MIKROTIK_01 ansible_host=10.0.0.4
2- HOSS_IP_ADDRESS.
[hosts_huawei] 10.0.0.2 // SW_HUAWEI_01
3- Хозяемое имя (ESTA Opção Precisamos DEALAR O IP E HostName No Arquivo/etc/hosts)
Editando arquivo/etc/hosts (Escolha Seu Editor vi/Vim/Nano/Pico)
$ sudo vim /etc/hosts
Inserindo OS Dados Doctro do Arquivo/etc/hosts
# ANSIBLE HOSTS # IP_ADDRESS HOSTNAME 10.0.0.3 RT_HUAWEI_01
Editando o Arquivo Hosts Anbible (Escolha Seu Editor Vi/Vim/Nano/Pico)
$ vim hosts
[hosts_huawei] 10.0.0.2 // SW_HUAWEI_01 RT_HUAWEI_01
Após InformatoS OS Endereços IPS E/OU HostNames IPRES Configurar As Variáveis Locais Para Cada Tipo de Host (Caso Tensário).
Neste Caso Utilizamos Apenas A “Variável Local” ansible_network_os
que será utilizada para informatar ao Неизбежный O. Так, Sistema Emplational) делают хост, Pois São Equipamentos de Marcas Difeerentes, Neste Caso Utilizamos Hosts Huawei, Cisco E Microtik.
Huawei =>
Cisco =>
Микротик =>
Caso Osuam Usuários, Senhas E Portas de Acesso Difeerentes Para Cada Equipamento, Será Nequio Inserir As Linhas de Ansible_user
, ansible_password
, ansible_become_password
e Ansible_port
Em Cada Grupo, Para Que Towsam Utilizar As Credenciais Corretas.
Exemplo Do Arquivo Hosts Finalizado:
[all:vars] ansible_user=admin ansible_password=Password123 ansible_become_password=RootPassword123 ansible_port=22 ansible_connection=network_cli ansible_become=yes ansible_become_method=enable gather_facts=false [hosts_cisco] SW_CISCO_01 ansible_host= 10.0.0.1 [hosts_cisco:vars] ansible_network_os=ios [hosts_huawei] SW_HUAWEI_01 ansible_host= 10.0.0.2 RT_HUAWEI_01 ansible_host= 10.0.0.3 [hosts_huawei:vars] ansible_network_os=ce [hosts_mikrotik] RT_MIKROTIK_01 ansible_host= 10.0.0.4 [hosts_mikrotik:vars] ansible_network_os=routeros
Играть в книгу
O Arquivo Playbook Do Anbible ém arquivo yaml, este tipo de arquivo é iniciado por “—” E Precisa de indicação (DOIS ESPAçOS PARA CADA Nível) Para Sua Configuração, Assim Como Precisa Da Extensão. Никакой финала делаю ном делаю Arquivo.
POR PADRãOO DEACHIMOS UM NOME ( ИМЯ
) PARA o Gruupo de Atividades que queremos realizar, EM Seguida Softimos OS Hosts ( Hosts
) que farão parte daquele grupo de atividades, informatamos PARA o Anbible Que Não Queremos Que Ele Colete Fatos ( START_FACTSS
) Sobre O Host Remoto E Ignore_Errors
Diformos Para Que Caso Haja Algum arro O Anbible Siga Para Proxima Tarefa, Entre Entras Tossíveis Variáveis Que Podem Ser Inseridas Nesta Seção, Em Seguida Iremos Realizar As Tarefas (задачи).
TAREFAS (задачи): Nesta Seção Onde Serão ExecutaDos OS Módulos E ENVIADOS Comandos Para OS Hosts Remotos Afim de Realizar Diversoss Tipos de Ações, EM Nosso Caso, IREMOS UTILIZAR OS Módulos de Rede Para Cada Equipamento ( iOS_Config
Para Cisco, CE_Config
Para Huawei, Routeros_Command
Para Mikrotik), Realizaremos OS Backups DOS-хозяев E Salvaremos Нет Диреторио Эскольхидо, Renomeando Da Forma Que Acharmos Melhor.
COM O Módulo de Rede, Seja Ele ios_config
ou ce_config
PodeMos Utilizar A Tunção de Backup (Backup), SEM Que Precisemos Utilizar Comandos Da CLi DO Vendor, Para Isso Utilizamos Esta Função e Suas Opções (Backup_Options), Neste Caso Apenas Dir_Path.
ГАЕТЕНТАЦИЙ HUSTAççES Собрей Микротик
- O Mikrotik NãO TOUSUI UM Módulo Anisible de Redes Para Realização Dos Backups, COMO NOS Automos Поставщики, Então Iremos Realizar OS Backups Executando OS Comandos Beansários Нет ROTEALOR VIA CLI E ENVIANDO PARA NOSSO Servidor, через FTP Отказ
- ОС Comandos (
Команды
) Executados No Mikrotik São Prósaios Da Cli Do Provider. - Как variáveis
Варс
(ftp_server_var.
,ftp_user_var
еftp_pass_var
) Пожалуйста, ОС Dados de Autenticação Do ServidorFTP
ВариавельДата
Será Utilizada Para RenoMear o Arquivo Salvo E A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A PARIáVELCaminho_Arquivo
Подходите ао Caminho Para o Arquivo desejado. - Serão Realizados Dois Backups, o arquivo.backup e arquivo.src
O Diretório é SoftiDo Através da Opção Dir_Path, Sendo Este O Local Onde Ficará Salvo O Arquivo No Servidor E Caso O Diretório Desejado Não Eustea, O Mesmo Será Criado.
O nome do arquivo por padrão tem o formato: Hostname_config. Yyyy-mm-dd @ hh: мм: ss
Para RenoMearmos OS Arquivos de Backup, Utilizamos As Variáveis Esshias Do Anbible: Inventory_HostName – Coleta O HostName Do Host Ansible_Host – Coleta O Имя хоста E EndeReço IP делает хост
Play Book – Main.yml
--- - name: Rotina de backup de hosts Cisco hosts: hosts_cisco gather_facts: no ignore_errors: yes tasks: - name: Backup host config - Cisco ios_config: backup: yes backup_options: dir_path: "/home/ansible/{{ inventory_hostname }}" - name: Rotina de backup de hosts Huawei hosts: hosts_huawei gather_facts: no ignore_errors: yes tasks: - name: Backup host config - Huawei ce_config: backup: yes backup_options: dir_path: "/home/ansible/{{ ansible_host }}" - name: Rotina de Backup de hosts Mikrotik hosts: hosts_mikrotik gather_facts: no ignore_errors: yes vars: ftp_server_var: "ftpipaddress" ftp_user_var: "ftpuser" ftp_pass_var: "ftppassword" date: "{{ lookup('pipe', 'date +%Y-%m-%d@%H:%M:%S') }}" caminho_arquivo: /home/ansible/{{ inventory_hostname }} tasks: - name: Create a directory if it does not exist ansible.builtin.file: path: "{{ caminho_arquivo }}" state: directory mode: '0755' - name: Backup host config (file.backup) - Mikrotik routeros_command: commands: - /system backup save name "{{ inventory_hostname }}" - /tool fetch address={{ ftp_server_var }} src-path={{ inventory_hostname }}.backup user={{ ftp_user_var }} password={{ ftp_pass_var }} upload=yes port=21 mode=ftp dst-path={{ caminho_arquivo }}/{{ inventory_hostname }}_config.{{ date }}.backup - :delay 5 - /file remove "{{ inventory_hostname }}.backup" - name: Backup host config (file.src) - Mikrotik routeros_command: commands: - /export file={{ inventory_hostname }} - /tool fetch address={{ ftp_server_var }} src-path={{ inventory_hostname }}.rsc user={{ ftp_user_var }} password={{ ftp_pass_var }} upload=yes port=21 mode=ftp dst-path={{ caminho_arquivo }}/{{ inventory_hostname }}_config.{{ date }}.rsc - :delay 5 - /file remove "{{ inventory_hostname }}.rsc"
ExecutAndo Anibile.
Neste TOPICO IREMOS EXPUTAR O Ansible Para que реализуйте Rotina de Backup DOS Hosts Cadastrados. O Comando Ansible-Playbook Irá Utilizar Arquivo Hosts Como Inventário E Utilizará o Arquivo Main.yml Como Playbook.
$ ansible-playbook -i hosts main.yml
Caso Precisemos Fazer Устранение неисправностей AO Executar o Comando Acima, Podimos Utilizar -VVV
Para Que Sejam Mosterados Mais Informações de Saída.
$ ansible-playbook -i hosts main.yml -vvv
САИДА ДЕЛАЕТ ОБЯЗАТЬ
-> ansible-playbook -i hosts main.yml PLAY [Rotina de backup de hosts Cisco] ********************************************************************************* TASK [Backup host config - Cisco] ************************************************************************************** changed: [SW_CISCO_01] PLAY [Rotina de backup de hosts Huawei] ******************************************************************************** TASK [Backup host config - Huawei] ************************************************************************************* changed: [SW_HUAWEI_01] changed: [RT_HUAWEI_01] PLAY [Rotina de Backup de hosts Mikrotik] ****************************************************************************** TASK [Create a directory if it does not exist] ************************************************************************* changed: [RT_MIKROTIK_01] TASK [Backup host config (file.backup) - Mikrotik] ********************************************************************* ok: [RT_MIKROTIK_01] TASK [Backup host config (file.src) - Mikrotik] ************************************************************************ ok: [RT_MIKROTIK_01] PLAY RECAP ************************************************************************************************************* SW_CISCO_01 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 SW_HUAWEI_01 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 RT_HUAWEI_01 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 RT_MIKROTIK_01 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Agendamento dos backups
NESTE TOPICO Agendaremos Execução делает Anbible Via Cron, Para Que Rotina de Backup, Seja Realizada Toda Sexta-Feira As 23:59. PARA ABRIR Editar, Utilizamos o Comando:
$ crontab -e
Doctro Do Arquivo, Inserimos как Informações abaixo:
# AGENDAMENTO CRON MANUAL - 23:59 TODA SEXTA FEIRA (5) 59 23 * * 5 /bin/ansible-playbook -i /home/ansible/hosts /home/ansible/main.yml > /home/ansible/log_ansible.log 2>&1
PARA Listarmos OS Agendamentos que existem Нет Nosso Sistema.
$ crontab -l
Реферис
Неизбежный
https://docs.ansable.com/ansible/3/user_guide/windows_faq.html#:~:text=can%20Ansible%20RUN%20ON%20Windows pictubsystem%20For%20Linux%20(wsl). 20 Windows% 20subsystem% 20force% 20Linux% 20с% 20not% 20supported% 20Байт% 20microsoft,% 20beres% 20 microsoft, быть% 20;% 20systems. Отказ Inventório Anbible (файл хостов)
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html
https://github.com/ansible-collections/community.network
https://github.com/ansible/ansible/issues/69036
https://www.unixarena.com/2019/06/downgrading-ansible-engine-on-centos-7-rhel-7.html/
https://stackoverflow.com/questions/32297456/how-to-ignore-ansible-ssh-authenticity-checking
https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/network_cli_connection.html
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/gather_facts_module.html
https://www.youtube.com/watch?v=JOtIVGy1SgE
https://www.digitalocean.com/commumunity/tutorials/how-to-uss-cron-to-automate-tasks-centos-8-8-9-9.| https://crontab.guru/every-week
https://docs.ansable.com/ansible/latest/collections/ansible/buittin/cron_module.html.
Оригинал: “https://dev.to/thamayron/ansible-automacao-de-backups-4i17”