Ansible – Criação do Playbook

Olá Pessoal,

   Conforme mencionado em nosso último post, hoje gostaria de trazer para você as configurações executadas em nosso playbook, para que possamos acessar nosso equipamento Cisco ( CSR1000V ) para capturar sua configuração ( running-config ) e salvar essa configuração em uma pasta específica. Para que isso possa acontecer é necessário fazer algumas validações, e assim garantir acesso ao nosso equipamento. Primeiramente um teste rápido que devemos executar via Ubuntu é fazermos o teste de ping, conforme abaixo:

   Após esse processo devemos garantir que nosso roteador é acessível via protocolo SSH ( Secure Shell ), isso é necessário porque o Ansible utiliza-se somente desse protocolo para acesso aos equipamentos ( Roteadores, Switches, Servidores, etc ) e quando pensarmos nessa utilização precisamos garantir que o protocolo SSH esteja habilitado em nosso equipamento e da mesma forma acessível. Conforme abaixo, eu estou executando o acesso ao meu equipamento, e como esperado ele me questiona para confirmação de acesso usando uma nova chave de SSH para o equipamento. Após esse processo digito a senha e tenho acesso completo ao equipamento. Se tiver interesse em habilitar o SSH Server no Ubuntu siga esse procedimento, mas nesse momento você não precisa se preocupar em habilitar esse serviço nesse sistema operacional.

   Após esse acesso podemos validar em nosso roteador qual sessão foi estabelecida com o equipamento, bem como verificar o tipo de criptografia, status e username logado. Conforme mostrado na figura com a representação numero ( 1 ).

   Logo abaixo, temos maiores detalhes sobre a conexão e a chave criptográfica utilizada pelo protocolo. Após essa validação, eu saio do modo de acesso via SSH ao roteador e podemos observar na figura com a representação numero ( 2 ) que não temos mais nenhuma sessão estabelecida com o equipamento. Se quiser monitorar acesso ao seu roteador habilite o ” debug ip ssh detail “.

   Para que vocês possam fazer a configuração de SSH ao nosso roteador segue os comandos básicos abaixo, vale lembra que aqui nesse ambiente de teste estou utilizando um usuário local criado no equipamento com acesso privilegiado, entretanto devemos lembrar que ambientes mais robustos seria interessante que esse usuario fosse autenticado através de outras plataformas como Radius, TACACS+.

!
username rodrigo privilege 15 password 0 rodrigo
!
ip domain name cisco.com
!
ip ssh time-out 60
ip ssh source-interface GigabitEthernet3
ip ssh version 2
!
line vty 0 15
login local
transport input ssh

   Enfim, depois de garantir total acesso ao equipamento, segue abaixo a configuração de nosso playbook para que possamos capturar o ” show running-config “.

---
- 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 run
    register: config

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

   Podemos observar abaixo que temos nossos arquivos criados, conforme em nossos posts anteriores e devidamente validado, pois no presente momento não temos nenhum backup de configuração ( .txt )

   Após todo esse processo devemos executar nosso playbook através do comando ” ansible-playbook -i hosts backup_cisco_router.yaml “. Na sequencia podemos observar todos os passos de nosso playbook sendo visualizado através das confirmações de nossas “ tasks “, e na última ação ” PLAY RECAP ” ele sempre irá trazer para nós o resumo se foi feito com sucesso e se tivemos alguma alteração baseado na ultima solicitação.

   Com isso podemos visualizar nosso arquivo ” .txt ” com toda a configuração atual de nosso equipamento.

   Espero que vocês tenham gostado e no proximo post vou demostrar algumas variações que podemos executar dentro dessa lógica de script.

   Aguardo comentários.  🙂 

Abs,
Rodrigo

0
0

Link permanente para este artigo: https://ciscoredes.com.br/2017/08/09/ansible-criacao-do-playbook/

3 comentários

    • Ledson em 5 de maio de 2020 às 15:41
    • Responder

    TASK [show running-config] ************************************************************************************************************
    fatal: [192.168.31.49]: FAILED! => {“changed”: false, “msg”: “show run\r\n ^\r\n% Invalid input detected at ‘^’ marker.\r\n\r\nR01>”}
    to retry, use: –limit @/etc/ansible/backup_cisco_router.retry

    0

    0
    1. Olá,

      Esse erro está acusando porque de fato você não esta no modo privilegiado de seu equipamento. Pelo output observe ( \nR01>” ).

      Podemos pensar duas formas aqui, ou de fato sua variavel “auth_pass” não está sendo validada ou erro da senha, e segunda opção seria avaliar a versão que você esta utilizando do Ansible, pois esse metodo de conexão ( connection: local ) foi atualizada para evitarmos alguns problemas de conectividade com os equipamentos. Caso queira pesquisar pode avaliar na documentação ( https://docs.ansible.com/ansible/latest/network/getting_started/network_differences.html#privilege-escalation-enable-mode-become-and-authorize )

      Abs

      0

      0
    • Arthur em 19 de setembro de 2022 às 22:28
    • Responder

    Não esta funcionando na versão 2.9
    he full traceback is:
    File “/tmp/ansible_ios_command_payload_ehf5zxmm/ansible_ios_command_payload.zip/ansible/module_utils/network/ios/ios.py”, line 86, in get_capabilities
    capabilities = Connection(module._socket_path).get_capabilities()
    File “/tmp/ansible_ios_command_payload_ehf5zxmm/ansible_ios_command_payload.zip/ansible/module_utils/connection.py”, line 190, in __rpc__
    raise ConnectionError(to_text(msg, errors=’surrogate_then_replace’), code=code)
    fatal: [192.168.0.108]: FAILED! => {
    “ansible_facts”: {
    “discovered_interpreter_python”: “/usr/libexec/platform-python”
    },
    “changed”: false,
    “invocation”: {
    “module_args”: {
    “auth_pass”: null,
    “authorize”: null,
    “commands”: [
    “show run”
    ],
    “host”: null,
    “interval”: 1,
    “match”: “all”,
    “password”: null,
    “port”: null,
    “provider”: {
    “auth_pass”: “VALUE_SPECIFIED_IN_NO_LOG_PARAMETER”,
    “authorize”: false,
    “host”: “192.168.0.108”,
    “password”: “VALUE_SPECIFIED_IN_NO_LOG_PARAMETER”,
    “port”: null,
    “ssh_keyfile”: null,
    “timeout”: null,
    “username”: “ansible”
    },
    “retries”: 10,
    “ssh_keyfile”: null,
    “timeout”: null,
    “username”: null,
    “wait_for”: null
    }
    },
    “msg”: “command timeout triggered, timeout value is 10 secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.”
    }

    0

    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