Ansible – Variações no Playbook – ” Include “

Olá Pessoal,

   Baseando-se em nosso ultimo post, acredito que vocês tenham pensado em algumas alternativas para capturar comandos dos equipamentos ou de alguma forma ser mais flexível para armazenar arquivos. Pensando em algumas alternativas segue aquelas que acho interessante compartilhar com vocês para que isso possa de alguma forma ser uma implementação dentro de seu ambiente.

Como vocês observaram nosso arquivo de texto estava sendo salvo com o IP do equipamento, talvez isso não seja interessante e você gostaria de salvar esse documento através do hostname do equipamento, tendo isso como principio vamos fazer algumas alterações para que isso possa acontecer. Nosso primeiro passo é editar o arquivo de hosts ( inventário ) colocando nele a denominação do hostname e nossa variável ” ansible_host ” obviamente atrelado ao nosso IP de gerenciamento.

[routers]
R1 ansible_host=192.168.0.19

   Desta forma precisamos fazer uma pequena alteração em nosso playbook adicionando a variável ” inventory_hostname ” no momento de salvar nosso arquivo ( .txt ). Para ficar melhor documentado, vocês podem observar que podemos adicionar algo após nossa variável, e assim a documentação do nome desse arquivo fica personalizada.  🙂 

   Segue abaixo nosso novo arquivo:

---
- name: Acesso remoto aos equipamentos
  hosts: routers
  gather_facts: no
  connection: local

  tasks:
  - name: OBTAIN LOGIN CREDENTIALS
    include_vars: secret.yaml

  - name: Define access
    set_fact:
      provider:
        host: "{{ ansible_host }}"
        username: "{{ creds['username'] }}"
        password: "{{ creds['password'] }}"
        auth_pass: "{{ creds['auth_pass'] }}"

  - name: show running-config
    ios_command:
     provider: "{{ provider }}"
     commands:
        - show running-config
    register: config

  - name: save output Running
    copy:
      content: "{{ config.stdout[0] }}"
      dest: "/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_running.txt"

   Com isso, podemos executar nosso playbook como explicado anteriormente, e logo vocês podem observar a diferença de ” output “, para qual temos o hostname populado ” R1 “, bem como o arquivo de texto que foi gerado como ” R1_running.txt

   Depois de fazermos essas alterações vocês talvez queiram incluir mais comandos em nossa playbook, para que de alguma forma seja documentado, ou seja, vocês podem ir adicionando mais comandos conforme exemplo anterior e salvar em um novo arquivo. Segue exemplo para adicionarmos mais comandos: 

- name: show version
    ios_command:
      provider: "{{ provider }}"
      commands:
        - show version
    register: config

  - name: save output Version
    copy:
      content: "{{ config.stdout[0] }}"
      dest: "/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_version.txt"

   Após compilar novamente nossa playbook vocês podem observar que foram executados os dois comandos e consequentemente gerados dois arquivos.

   Agora vêm o ponto, pensando em comandos e sobre a escalabilidade desse formato, onde teremos uma playbook gigantesca para executar várias tarefas.  💡 O que podemos fazer?

   Acredito que seja mais interessante criarmos um arquivo ( yaml ), onde colocaremos todos nossos comandos, e desta forma, podemos chamar esse arquivo através de nossa playbook principal, assim ela não fica poluída com varias ações para ser executada. Para isso devemos usar nosso modulo “ include “, conforme segue abaixo em nosso script.

---
- name: Acesso remoto aos equipamentos
  hosts: routers
  gather_facts: no
  connection: local

  tasks:
  - name: OBTAIN LOGIN CREDENTIALS
    include_vars: secret.yaml

  - name: Define access
    set_fact:
      provider:
        host: "{{ ansible_host }}"
        username: "{{ creds['username'] }}"
        password: "{{ creds['password'] }}"
        auth_pass: "{{ creds['auth_pass'] }}"

  - name: Obtain commands
    include: commands_variance.yaml

   Após essa inserção eu criei um novo documento ( yaml ), onde foi inserido todos os comandos que desejo fazer para meu equipamento, e assim fica mais claro as execuções de tarefas dentro de nossa playbook.

---
  - name: show running-config
    ios_command:
     provider: "{{ provider }}"
     commands:
        - show running-config
    register: config

  - name: save output Running
    copy:
      content: "{{ config.stdout[0] }}"
      dest: "/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_running.txt"

  - name: show version
    ios_command:
      provider: "{{ provider }}"
      commands:
        - show version
    register: config

  - name: save output Version
    copy:
      content: "{{ config.stdout[0] }}"
      dest: "/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_version.txt"

   Após a execução o mesmo output é observado, porém temos uma estruturação muito mais adequada para execução e mapeamento de seu script. O que acharam? Deixem seus comentários.

Abs,
Rodrigo

0
0

Link permanente para este artigo: https://ciscoredes.com.br/2017/08/14/ansible-variacoes-no-playbook-include/

3 comentários

  1. Rodrigo,

    Excelente os posts sobre Ansible. Acredito que é seja o único site em português com material sobre Ansible para Network.

    0

    0
    1. Obrigado.

      Vamos continuar divulgando e se vocês tiverem alguma ideia para agregar em conteúdo ou facilidades que vocês já estão trabalhando vamos trazer para a comunidade. 🙂

      0

      0
    • Wairisson em 19 de fevereiro de 2019 às 19:52
    • Responder

    ótimo post Rodrigo!

    1

    0

Deixe um comentário

Seu e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Translate