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
3 comments
Rodrigo,
Excelente os posts sobre Ansible. Acredito que é seja o único site em português com material sobre Ansible para Network.
Author
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. 🙂
ótimo post Rodrigo!