Рубрики
Без рубрики

Anisible – Automação de Backups

Sobre Anbible o Ansible é Uma Ferramenta de Automação SEM Agente Que Gerencia Hosts Por … Помечено с помощью Anbible, Python, Network, Reintegris.

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 Servidor FTP Вариавель Дата 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áVEL Caminho_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://dev.to/thamayron/ansible-automacao-de-backups-4i17”