Trabalhando com comandos Ansible Ad-Hoc

5 minute read

Buenas NetCode. Neste artigo iremos abordar alguns conceitos sobre o ad-hoc, o ad-hoc nada mais é que, aplicar parâmetros para buscar informações nas quais você deseja fazer um diagnóstico rápido na sua rede sem precisar escrever um playbook.

Trabalhando com Ad-Hoc commands

Ao executar o seguinte comando ansible SW_CORE_1 -m raw -a "show version" -u teste -k", tivemos o seguinte retorno:

SW_CORE_1 | CHANGED | rc=0 >>
Cisco IOS Software, Linux Software (I86BI_LINUXL2-ADVENTERPRISEK9-M), Version 15.2(CML_NIGHTLY_20151103)FLO_DSGS7, EARLY DEPLOYMENT DEVELOPMENT BUILD, synced to  FLO_DSGS7_POSTCOLLAPSE_TEAM_TRACK_DSGS_PI5
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2015 by Cisco Systems, Inc.
Compiled Wed 04-Nov-15 02:31 by mmen

ROM: Bootstrap program is Linux

SW_CORE_1 uptime is 1 minute
System returned to ROM by reload at 0
System image file is "unix:/opt/unetlab/addons/iol/bin/L2-ADVENTERPRISEK9-M-15.2-IRON-20151"
Last reload reason: Unknown reason



This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

Linux Unix (Intel-x86) processor with 934130K bytes of memory.
Processor board ID 67108960
12 Ethernet interfaces
1 Virtual Ethernet interface
1024K bytes of NVRAM.

Configuration register is 0x0
Shared connection to sw_core_1 closed.

O -m executa o módulo ansible, por padrão é executado somente um, o parâmetro raw serve para indicar o comando no qual você deseja executar no device remoto no qual está dentro do arquivo inventário, o arquivo inventário por padrão é definico como arquivo hosts. O -a executa o argumento dentro do módulo do device remoto, o -u indica o username local configurado no device remoto ou poderia ser um usuário cadastrado via radius ou tacacs e o -k indica a senha na qual você irá inserir após teclar o enter.

Segue a definição dos parâmetros mais comuns descritos abaixo:

  • -m: Executa o módulo ansible, executa um por padrão
  • -a: Permite executar argumentos para o módulo remoto
  • -u: Qual usuário nos permite executar remoto.
  • -k: Permite especificar a senha do user SSH
  • raw: Esse parâmetro é utilizado quando queremos nos conectar com devices que não rodam python nativamente, ou seja, ele carrega um módulo dentro da control node, que seria a máquina ansible que está enviando comandos via o próprio shell. Ou seja, essa execução via SSH é feita por debaixo dos panos. Esse comando é utilizado quando temos alvo windows, ou devices de rede que não rodam python.

Repare que no arquivo hosts, definimos dois grupos de devices:

[ansible_core]
SW_CORE_1
SW_CORE_2
   
[ansible_access]
SW_ACCESS_1
SW_ACCESS_2
SW_ACCESS_3
SW_ACCESS_4

Ao executar o comando ansible ansible_core -i ./hosts -m raw -a "show ip int br" -u teste -k, repare que esse comando irá executar o comando show ip int br em todos os devices que estão no grupo ansible_core:

SW_CORE_1 | CHANGED | rc=0 >>

Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            unassigned      YES unset  up                    up      
Ethernet0/1            unassigned      YES unset  up                    up      
Ethernet0/2            unassigned      YES unset  up                    up      
Ethernet0/3            unassigned      YES unset  up                    up      
Ethernet1/0            unassigned      YES unset  up                    up      
Ethernet1/1            unassigned      YES unset  up                    up      
Ethernet1/2            unassigned      YES unset  up                    up      
Ethernet1/3            unassigned      YES unset  up                    up      
Ethernet2/0            unassigned      YES unset  up                    up      
Ethernet2/1            unassigned      YES unset  up                    up      
Ethernet2/2            unassigned      YES unset  up                    up      
Ethernet2/3            unassigned      YES unset  up                    up      
Vlan1                  192.168.36.214  YES NVRAM  up                    up      Shared connection to sw_core_1 closed.

SW_CORE_2 | CHANGED | rc=0 >>

Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            unassigned      YES unset  up                    up      
Ethernet0/1            unassigned      YES unset  up                    up      
Ethernet0/2            unassigned      YES unset  up                    up      
Ethernet0/3            unassigned      YES unset  up                    up      
Ethernet1/0            unassigned      YES unset  up                    up      
Ethernet1/1            unassigned      YES unset  up                    up      
Ethernet1/2            unassigned      YES unset  up                    up      
Ethernet1/3            unassigned      YES unset  up                    up      
Ethernet2/0            unassigned      YES unset  up                    up      
Ethernet2/1            unassigned      YES unset  up                    up      
Ethernet2/2            unassigned      YES unset  up                    up      
Ethernet2/3            unassigned      YES unset  up                    up      
Vlan1                  192.168.36.215  YES NVRAM  up

Ao inserir os parâmetros ansible_core -i ./hosts, desejei filtrar apenas filtar as informações dos dispositivos nos quais eu queria obter informação, para que isso ocorresse, precisei inserir o parâmetro ansible_core que seria um grupo de devices dentro do inventário -i ./hosts que seria o arquivo onde estão alocados os devices remotos.

Ao executar o comando ansible ansible_core -i ./hosts -m raw -a "show ip int br" -u teste -k | grep 'SW\|Vlan1', irei filtrar apenas as informações que eu quero obter através do parâmetro grep. O parâmetro 'SW\|Vlan1' irá me retornar o hostname e o IP da interface vlan 1, na qual seria a interface de gerência do dispositivo remoto alocado no meu laboratório. Segue o retorno do comando:

SW_CORE_1 | CHANGED | rc=0 >>
Vlan1                  192.168.36.214  YES NVRAM  up                    
SW_CORE_2 | CHANGED | rc=0 >>
Vlan1                  192.168.36.215  YES NVRAM  up 

Ao executar o comando ansible ansible_core -i ./hosts -m raw -a "show run" -u teste -k | grep 'username' > usernames.txt, note que, no diretório no qual foi executado este comando, irá ser gerado um arquivo usernames.txt, dentro desse arquivo irá ter apenas gravado a linha de username dos devices, pois, para que isso ocorresse, inseri o parâmetro grep para buscar a linha “username” dentro do comando “show run”. Abaixo é mostrado as linhas de usernames dos devices remotos:

username teste privilege 15 password 0 teste
username teste privilege 15 password 0 teste

Percebe-se que não está descritos em quais devices esses usernames estão alocados, para sofisticarmos ainda mais, iremos inserir os parâmetros grep 'hostname\|username' > usernames.txt. Esses parâmetros irá gravar apenas as linhas de hostname, no qual identifica o nome do device e a linha de username, que seria a linha onde estão alocados os usuários locais do device. Abaixo é mostrado as linhas de hostname e username dos devices remotos:

hostname SW_CORE_1
username teste privilege 15 password 0 teste
hostname SW_CORE_2
username teste privilege 15 password 0 teste

O parâmetro grep (Linux/Unix) serve para filtrar a linha que queremos mostrar através de um parâmetro específico que contém nessa linha.

Bom, esses são alguns exemplos de como trabalhar com funções Ad-Hoc. Os comandos Ad-Hoc serve para diagnosticar a rede ou até mesmo procurar informações de um ou mais devices, caso queremos setar configurações, devemos utilizar o ansible playbook.

E aí, o que achou deste artigo? Dá um pulo lá no nosso Linkedin para ficar por dentro de novas publicações, vai ser legal contar com sua presença por lá. Ficamos por aqui e nos vemos no próximo post.

Leave a Comment