<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thamayron</title>
    <description>The latest articles on DEV Community by Thamayron (@thamayron).</description>
    <link>https://dev.to/thamayron</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F651313%2Fcbf33656-c80f-43ff-8457-183b67236156.jpeg</url>
      <title>DEV Community: Thamayron</title>
      <link>https://dev.to/thamayron</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thamayron"/>
    <language>en</language>
    <item>
      <title>ANSIBLE - AUTOMAÇÃO DE BACKUPS</title>
      <dc:creator>Thamayron</dc:creator>
      <pubDate>Mon, 21 Jun 2021 00:04:29 +0000</pubDate>
      <link>https://dev.to/thamayron/ansible-automacao-de-backups-4i17</link>
      <guid>https://dev.to/thamayron/ansible-automacao-de-backups-4i17</guid>
      <description>&lt;h4&gt;
  
  
  &lt;strong&gt;Sobre Ansible&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;O Ansible é 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 Ansible pode gerenciar remotamente, uma grande quantidade de máquinas, a partir de um servidor, ou seja, após instalar o Ansible, o servidor irá utilizar SSH para se comunicar com os hosts definidos em sua configuração.&lt;/p&gt;

&lt;p&gt;Ansible pode ser instalado e executado em qualquer máquina com Sistema Operacional baseado em UNIX (Red Hat, Debian, CentOS, macOS e qualquer um dos BSDs), não sendo possível utilizá-lo em Windows. É necessária a utilização do Python (Python 2 (versão 2.7) ou Python 3 (versão 3.5 e superior)).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Sobre o projeto&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Neste post iremos utilizar o Ansible para rotinas de Backup de ativos de rede (Network Automation), podemos utilizá-lo em uma rede com equipamentos de diversas marcas e modelos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neste cenário utilizaremos:&lt;br&gt;
Host Ansible:&lt;br&gt;
&lt;code&gt;Máquina Windows, com WSL (Windows Subsystem for Linux), utilizando "Ubuntu 20.04.1 LTS"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aaeow8xv5ovsp9m97kc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aaeow8xv5ovsp9m97kc.PNG" alt="Ubuntu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hosts para backup:&lt;br&gt;
&lt;code&gt;Switch CISCO L3 (Layer 3 - Camada 3)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Switch HUAWEI L2 (Layer 2 - camada 2)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Roteador MIKROTIK&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Roteador HUAWEI&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Topologia Utilizada&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk6xvmyib8m3uwuf66w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk6xvmyib8m3uwuf66w2.png" alt="Topologia"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Instalando Ansible&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Para instalar o Ansible no Ubuntu, iremos atualizar o sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instalar Python e Ansible&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt install python3 python3-pip python-utils ansible -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Também podemos instalar através do gerenciador de pacotes do Python, o pip (como iremos trabalhar com o Python3, instalaremos e utilizaremos pip3)&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt install python3 python3-pip python-utils  -y
$ pip3 install ansible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Obs.: durante o processo de criação e testes, tivemos um problema com a versão do Ansible. &lt;br&gt;
No ambiente Ubuntu após o início dos testes, utilizamos a versão "ansible 2.9.6" e após a conclusão, tudo funcionou corretamente.&lt;br&gt;
Posteriormente em novos testes em novas máquinas Ubuntu e CentOS, após a instalação do Ansible, a versão instalada foi a "ansible 2.9.18", e o mesmo código não estava funcionando, após diversas pesquisas, encontramos um problema de versão após o "ansible 2.9.7" para huawei (ce_config) e juniper (junos_facts e junos_config), para corrigir este problema, realizamos o downgrade da versão do ansible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Checando versão do python, pip e ansible&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python -V ou python --version
$ python3 -V ou python3 --version
$ ansible --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso precise saber qual python ou ansible está utilizando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ which python
$ which python3
$ which ansible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Downgrade do ansible&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pip install ansible==[version]
$ pip3 install ansible==[version]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pip install ansible==2.9.6
$ pip3 install ansible==2.9.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação e checagem das versões, iremos então para a utilização do Ansible em Network Automation, em rotinas de Backup.&lt;/p&gt;

&lt;p&gt;Para este projeto utilizamos apenas dois arquivos: hosts (arquivo de inventário que contém os hosts e suas variáveis) e main.yml (playbook utilizado para realizar as tarefas).&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Criando local de trabalho&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Iniciando, criamos um diretório no home para o Ansible e dentro do diretório os arquivos:&lt;/p&gt;

&lt;p&gt;Criaremos um diretório para trabalhar com o Ansible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir ansible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entraremos no diretório criado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd ansible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para checagem em qual diretório estamos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pwd 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criando o arquivo hosts e o main.yml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ touch hosts main.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Listamos os arquivos dentro do diretório atual&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Arquivo - hosts do Ansible&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Primeiro iremos tratar o arquivo hosts, neste arquivo iremos declarar os hosts que serão realizados os backups de forma automática.&lt;/p&gt;

&lt;p&gt;O arquivo hosts possui o formato INI ou YAML, neste projeto iremos utilizar o formato INI.&lt;/p&gt;

&lt;p&gt;Dentro do arquivo hosts iremos trabalhar com grupos, identificados através de colchetes “[]” e com variáveis que irão diferenciar características de cada grupo (caso necessário).&lt;/p&gt;

&lt;p&gt;[all:vars] - criamos um grupo de "variáveis globais" que serão aplicadas em todos os hosts que não possuírem variáveis definidas exclusivamente. &lt;br&gt;
Este grupo não é obrigatório, as variáveis podem ficar “soltas” no topo do arquivo, mas preferimos utilizar este formato para organizar o arquivo.&lt;/p&gt;

&lt;p&gt;As variáveis utilizadas neste grupo são:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;ansible_user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;USER_HERE&lt;/span&gt; &lt;span class="c1"&gt;// Usuário&lt;/span&gt;
&lt;span class="nx"&gt;ansible_password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;USER_PASSWORD_HERE&lt;/span&gt; &lt;span class="c1"&gt;// Senha&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;yes&lt;/span&gt; &lt;span class="c1"&gt;// Permite receber privilégios de "enable"&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become_password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;USER_ROOT_PASSWORD_HERE&lt;/span&gt; &lt;span class="c1"&gt;// senha de "enable"&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become_method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;enable&lt;/span&gt; &lt;span class="c1"&gt;// para informar ao sistema operacional o privilégio de “enable”, para checagem de opções de become: “ansible-doc -t become -l”&lt;/span&gt;
&lt;span class="nx"&gt;ansible_port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt; &lt;span class="c1"&gt;// Porta de conexão SSH aos hosts&lt;/span&gt;
&lt;span class="nx"&gt;ansible_connection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;network_cli&lt;/span&gt; &lt;span class="c1"&gt;// Plugin para acesso SSH aos hosts&lt;/span&gt;
&lt;span class="nx"&gt;gather_facts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;// Coletar fatos sobre o host remoto &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os demais grupos foram criados para cada vendor/marca de equipamentos, os nomes foram escolhidos para melhor identificação e agrupamento de hosts: [hosts_cisco], [hosts_huawei],[hosts_mikrotik].&lt;/p&gt;

&lt;p&gt;Podemos declarar os nomes dos hosts de três formas distintas, como mostradas abaixo, em nosso arquivo iremos utilizar a forma 1:&lt;/p&gt;

&lt;p&gt;1- HOSTNAME ansible_host=HOST_IP_ADDRESS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_cisco&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;SW_CISCO_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_mikrotik&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2- HOST_IP_ADDRESS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_huawei&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="c1"&gt;// SW_HUAWEI_01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3- HOSTNAME (esta opção precisamos declarar o IP e HOSTNAME no arquivo /etc/hosts)&lt;/p&gt;

&lt;p&gt;Editando arquivo /etc/hosts (escolha seu editor vi/vim/nano/pico)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo vim /etc/hosts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inserindo os dados dentro do arquivo /etc/hosts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;ANSIBLE&lt;/span&gt; &lt;span class="nx"&gt;HOSTS&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;IP_ADDRESS&lt;/span&gt;     &lt;span class="nx"&gt;HOSTNAME&lt;/span&gt;
&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;         &lt;span class="nx"&gt;RT_HUAWEI_01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Editando o arquivo hosts Ansible (escolha seu editor vi/vim/nano/pico)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vim hosts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_huawei&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="c1"&gt;// SW_HUAWEI_01&lt;/span&gt;
&lt;span class="nx"&gt;RT_HUAWEI_01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Após informados os endereços IPs e/ou Hostnames iremos configurar as variáveis locais para cada tipo de host (caso necessário).&lt;/p&gt;

&lt;p&gt;Neste caso utilizamos apenas a "variável local" &lt;code&gt;ansible_network_os&lt;/code&gt;, que será utilizada para informar ao Ansible o SO (Sistema Operacional) do host, pois são equipamentos de marcas diferentes, neste caso utilizamos hosts Huawei, Cisco e Mikrotik.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;HUAWEI =&amp;gt; ansible_network_os=ce&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CISCO =&amp;gt; ansible_network_os=ios&lt;/code&gt;&lt;br&gt;
&lt;code&gt;MIKROTIK =&amp;gt; ansible_network_os=routeros&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Caso possuam usuários, senhas e portas de acesso diferentes para cada equipamento, será necessário inserir as linhas de &lt;code&gt;ansible_user&lt;/code&gt;, &lt;code&gt;ansible_password&lt;/code&gt;, &lt;code&gt;ansible_become_password&lt;/code&gt; e &lt;code&gt;ansible_port&lt;/code&gt; em cada grupo, para que possam utilizar as credenciais corretas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Exemplo do arquivo hosts finalizado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;ansible_user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;admin&lt;/span&gt;
&lt;span class="nx"&gt;ansible_password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;Password123&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become_password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;RootPassword123&lt;/span&gt;
&lt;span class="nx"&gt;ansible_port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;
&lt;span class="nx"&gt;ansible_connection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;network_cli&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;yes&lt;/span&gt;
&lt;span class="nx"&gt;ansible_become_method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;enable&lt;/span&gt;
&lt;span class="nx"&gt;gather_facts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_cisco&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;SW_CISCO_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_cisco&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;ansible_network_os&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;ios&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_huawei&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;SW_HUAWEI_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;
&lt;span class="nx"&gt;RT_HUAWEI_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_huawei&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;ansible_network_os&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;ce&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_mikrotik&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt; &lt;span class="nx"&gt;ansible_host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;hosts_mikrotik&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;ansible_network_os&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;routeros&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;PLAY BOOK&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;O arquivo playbook do Ansible é um arquivo YAML, este tipo de arquivo é iniciado por “---" e precisa de indentação (dois espaços para cada nível) para sua configuração, assim como precisa da extensão .yml no final do nome do arquivo.&lt;/p&gt;

&lt;p&gt;Por padrão definimos um nome (&lt;code&gt;name&lt;/code&gt;) para o grupo de atividades que queremos realizar, em seguida definimos os hosts (&lt;code&gt;hosts&lt;/code&gt;) que farão parte daquele grupo de atividades, informamos para o Ansible que não queremos que ele colete fatos (&lt;code&gt;gather_facts&lt;/code&gt;) sobre o host remoto e &lt;code&gt;ignore_errors&lt;/code&gt; definimos para que caso haja algum erro o Ansible siga para a próxima tarefa, entre outras possíveis variáveis que podem ser inseridas nesta seção, em seguida iremos realizar as tarefas (tasks).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tarefas (tasks):&lt;/strong&gt;&lt;br&gt;
Nesta seção onde serão executados os módulos e enviados comandos para os hosts remotos afim de realizar diversos tipos de ações, em nosso caso, iremos utilizar os módulos de rede para cada equipamento (&lt;code&gt;ios_config&lt;/code&gt; para cisco, &lt;code&gt;ce_config&lt;/code&gt; para huawei, &lt;code&gt;routeros_command&lt;/code&gt; para mikrotik), realizaremos os backups dos hosts e salvaremos no diretório escolhido, renomeando da forma que acharmos melhor.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Com o módulo de rede, seja ele &lt;code&gt;ios_config&lt;/code&gt; ou &lt;code&gt;ce_config&lt;/code&gt; podemos utilizar a funçã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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;
  
  
  OBSERVAÇÕES IMPORTANTES SOBRE MIKROTIK
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;O Mikrotik não possui um módulo Ansible de Redes para realização dos backups, como nos outros vendors, então iremos realizar os backups executando os comandos necessários no roteador via CLI e enviando para nosso servidor, via &lt;strong&gt;FTP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Os comandos (&lt;code&gt;commands&lt;/code&gt;) executados no Mikrotik são próprios da CLI do vendor.&lt;/li&gt;
&lt;li&gt;As variáveis &lt;code&gt;vars&lt;/code&gt; (&lt;code&gt;ftp_server_var&lt;/code&gt;, &lt;code&gt;ftp_user_var&lt;/code&gt; e &lt;code&gt;ftp_pass_var&lt;/code&gt;) possuem os dados de autenticação do servidor &lt;code&gt;FTP&lt;/code&gt;, a variável &lt;code&gt;date&lt;/code&gt; será utilizada para renomear o arquivo salvo e a variável &lt;code&gt;caminho_arquivo&lt;/code&gt; corresponde ao caminho para o arquivo desejado.&lt;/li&gt;
&lt;li&gt;Serão realizados dois backups, o arquivo.backup e arquivo.src&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O diretório é definido 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 exista, o mesmo será criado.&lt;/p&gt;

&lt;p&gt;O nome do arquivo por padrão tem o formato:&lt;br&gt;
&lt;code&gt;HOSTNAME_config.YYYY-MM-DD@HH:MM:SS&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para renomearmos os arquivos de backup, utilizamos as variáveis especiais do Ansible:&lt;br&gt;
inventory_hostname - coleta o hostname do host&lt;br&gt;
ansible_host - coleta o hostname e endereço IP do host&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;PLAY BOOK - main.yml&lt;/strong&gt;
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rotina de backup de hosts Cisco&lt;/span&gt;
  &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hosts_cisco&lt;/span&gt;
  &lt;span class="na"&gt;gather_facts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;no&lt;/span&gt;
  &lt;span class="na"&gt;ignore_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;

  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Backup host config - Cisco&lt;/span&gt;
      &lt;span class="na"&gt;ios_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;backup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
        &lt;span class="na"&gt;backup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;dir_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/home/ansible/{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;inventory_hostname&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rotina de backup de hosts Huawei&lt;/span&gt;
  &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hosts_huawei&lt;/span&gt;
  &lt;span class="na"&gt;gather_facts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;no&lt;/span&gt;
  &lt;span class="na"&gt;ignore_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;

  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Backup host config - Huawei&lt;/span&gt;
      &lt;span class="na"&gt;ce_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;backup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
        &lt;span class="na"&gt;backup_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;dir_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/home/ansible/{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ansible_host&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rotina de Backup de hosts Mikrotik&lt;/span&gt;
  &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hosts_mikrotik&lt;/span&gt;
  &lt;span class="na"&gt;gather_facts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;no&lt;/span&gt;
  &lt;span class="na"&gt;ignore_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;

  &lt;span class="na"&gt;vars&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ftp_server_var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ftpipaddress"&lt;/span&gt;
    &lt;span class="na"&gt;ftp_user_var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ftpuser"&lt;/span&gt;
    &lt;span class="na"&gt;ftp_pass_var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ftppassword"&lt;/span&gt;
    &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lookup('pipe',&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'date&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+%Y-%m-%d@%H:%M:%S')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
    &lt;span class="na"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/ansible/{{ inventory_hostname }}&lt;/span&gt;
  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create a directory if it does not exist&lt;/span&gt;
       &lt;span class="na"&gt;ansible.builtin.file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
         &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;directory&lt;/span&gt;
         &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0755'&lt;/span&gt;

     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Backup host config (file.backup) - Mikrotik&lt;/span&gt;
       &lt;span class="na"&gt;routeros_command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;commands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/system backup save name "{{ inventory_hostname }}"&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/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&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;:delay &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/file remove "{{ inventory_hostname }}.backup"&lt;/span&gt;

     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Backup host config (file.src) - Mikrotik&lt;/span&gt;
       &lt;span class="na"&gt;routeros_command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
         &lt;span class="na"&gt;commands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/export file={{ inventory_hostname }}&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/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&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;:delay &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
           &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/file remove "{{ inventory_hostname }}.rsc"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Executando Ansible&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Neste tópico iremos executar o Ansible para que realize a rotina de backup dos hosts cadastrados.&lt;br&gt;
O comando ansible-playbook irá utilizar arquivo hosts como inventário e utilizará o arquivo main.yml como playbook.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ansible-playbook -i hosts main.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso precisemos fazer troubleshooting ao executar o comando acima, podemos utilizar &lt;code&gt;-vvv&lt;/code&gt;, para que sejam mostrados mais informações de saída.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ansible-playbook -i hosts main.yml -vvv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Saída do Ansible&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ansible&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;playbook&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="nx"&gt;hosts&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yml&lt;/span&gt;

&lt;span class="nx"&gt;PLAY&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Rotina&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;backup&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;hosts&lt;/span&gt; &lt;span class="nx"&gt;Cisco&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*********************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;TASK&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Backup&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Cisco&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;**************************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;SW_CISCO_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;PLAY&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Rotina&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;backup&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;hosts&lt;/span&gt; &lt;span class="nx"&gt;Huawei&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;********************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;TASK&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Backup&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Huawei&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*************************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;SW_HUAWEI_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;RT_HUAWEI_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;PLAY&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Rotina&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;Backup&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;hosts&lt;/span&gt; &lt;span class="nx"&gt;Mikrotik&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;******************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;TASK&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;does&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;exist&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;TASK&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Backup&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="nf"&gt;config &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Mikrotik&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*********************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;TASK&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Backup&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="nf"&gt;config &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Mikrotik&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;PLAY&lt;/span&gt; &lt;span class="nx"&gt;RECAP&lt;/span&gt; &lt;span class="o"&gt;*************************************************************************************************************&lt;/span&gt;
&lt;span class="nx"&gt;SW_CISCO_01&lt;/span&gt;              &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;unreachable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;skipped&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;rescued&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;ignored&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nx"&gt;SW_HUAWEI_01&lt;/span&gt;             &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;unreachable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;skipped&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;rescued&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;ignored&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nx"&gt;RT_HUAWEI_01&lt;/span&gt;             &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;unreachable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;skipped&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;rescued&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;ignored&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nx"&gt;RT_MIKROTIK_01&lt;/span&gt;           &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;    &lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;    &lt;span class="nx"&gt;unreachable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;skipped&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;rescued&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;    &lt;span class="nx"&gt;ignored&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Agendamento dos Backups&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Neste tópico agendaremos a execução do Ansible via Cron, para que a rotina de backup, seja realizada toda sexta-feira as 23:59.&lt;br&gt;
Para abrir editar, utilizamos o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ crontab -e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro do arquivo, inserimos as informações abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;AGENDAMENTO&lt;/span&gt; &lt;span class="nx"&gt;CRON&lt;/span&gt; &lt;span class="nx"&gt;MANUAL&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt; &lt;span class="nx"&gt;TODA&lt;/span&gt; &lt;span class="nx"&gt;SEXTA&lt;/span&gt; &lt;span class="nc"&gt;FEIRA &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;59&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;ansible&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;playbook&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;ansible&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;hosts&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;ansible&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yml&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="sr"&gt;/home/&lt;/span&gt;&lt;span class="nx"&gt;ansible&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;log_ansible&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para listarmos os agendamentos que existem no nosso sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ crontab -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Referências&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;Ansible&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/3/user_guide/windows_faq.html#:%7E:text=Can%20Ansible%20run%20on%20Windows,Subsystem%20for%20Linux%20(WSL).&amp;amp;text=The%20Windows%20Subsystem%20for%20Linux%20is%20not%20supported%20by%20Microsoft,be%20used%20for%20production%20systems" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/3/user_guide/windows_faq.html#:~:text=Can%20Ansible%20run%20on%20Windows,Subsystem%20for%20Linux%20(WSL).&amp;amp;text=The%20Windows%20Subsystem%20for%20Linux%20is%20not%20supported%20by%20Microsoft,be%20used%20for%20production%20systems&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Inventório Ansible (HOSTS FILE)
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Variáveis Ansible
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Instalar outra coleção do Ansible
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://github.com/ansible-collections/community.network" rel="noopener noreferrer"&gt;https://github.com/ansible-collections/community.network&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Problema de versão do Ansible
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://github.com/ansible/ansible/issues/69036" rel="noopener noreferrer"&gt;https://github.com/ansible/ansible/issues/69036&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Downgrade de versão do Ansible
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://www.unixarena.com/2019/06/downgrading-ansible-engine-on-centos-7-rhel-7.html/" rel="noopener noreferrer"&gt;https://www.unixarena.com/2019/06/downgrading-ansible-engine-on-centos-7-rhel-7.html/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  SSH ignorar key checking
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/32297456/how-to-ignore-ansible-ssh-authenticity-checking" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/32297456/how-to-ignore-ansible-ssh-authenticity-checking&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Plugin Network_cli
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/network_cli_connection.html" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/network_cli_connection.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h5&gt;
  
  
  Gather Facts
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/gather_facts_module.html" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/latest/collections/ansible/builtin/gather_facts_module.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;YAML&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=JOtIVGy1SgE" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=JOtIVGy1SgE&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;CRON&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-centos-8-pt" rel="noopener noreferrer"&gt;https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-centos-8-pt&lt;/a&gt;&lt;br&gt;
&lt;a href="https://crontab.guru/every-week" rel="noopener noreferrer"&gt;https://crontab.guru/every-week&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html" rel="noopener noreferrer"&gt;https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ansible</category>
      <category>python</category>
      <category>network</category>
      <category>reintegris</category>
    </item>
  </channel>
</rss>
