<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>DevNet on Cisco Redes</title>
        <link>https://ciscoredes.com.br/tags/devnet/</link>
        <description>Recent content in DevNet on Cisco Redes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>pt-br</language>
        <lastBuildDate>Tue, 13 Oct 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://ciscoredes.com.br/tags/devnet/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>BLOG – Resumo DevNet Create 2020 – Informações</title>
            <link>https://ciscoredes.com.br/2020/10/13/blog-resumo-devnet-create-2020-informacoes/</link>
            <pubDate>Tue, 13 Oct 2020 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2020/10/13/blog-resumo-devnet-create-2020-informacoes/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Number_Create_2020.png&#34; alt=&#34;Featured image of post BLOG – Resumo DevNet Create 2020 – Informações&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;Como todos sabem hoje ocorreu o &lt;a class=&#34;link&#34; href=&#34;https://developer.cisco.com/devnetcreate2020/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DevNet Create 2020&lt;/a&gt;, onde tivemos diversas palestras atendendo as 3 regiões com seus horários distintos e com conteúdo diferenciados, para que de alguma forma pudesse atender os diferentes públicos ( iniciantes à experts ).&lt;/p&gt;&#xA;&lt;p&gt;Baseado nesses tópicos gostaria de compartilhar algumas informações que foram capturadas durante o evento. Como em todo evento o &lt;strong&gt;Keynote&lt;/strong&gt; sempre traz os principais peers dentro daquele contexto, como ocorreu nos anos anteriores temos também a participação do CEO ( &lt;strong&gt;Chuck Robbins&lt;/strong&gt; ) junto com SVP and GM of Devnet ( &lt;strong&gt;Susie Wee&lt;/strong&gt; ).&lt;/p&gt;&#xA;&lt;h1 id=&#34;informações&#34;&gt;Informações&#xA;&lt;/h1&gt;&lt;p&gt;Diversas informações e novidades foram compartilhadas no Keynote, devido a isso resolvi condensar nesse post para ajudar à todos com esses caminhos e possibilidades.&lt;/p&gt;&#xA;&lt;p&gt;Nesta perspectiva temos diversos Laboratórios adicionais que estão populados no portal, na qual iremos ter mais possiblidades para fazer praticas e utilizar cada vez mais a estrutura de Sandbox. Isso atender para diferentes áreas e sabores, como abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_New_Labs.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Após isso temos 3 torres que foram mencionados especificamente, onde cada um pode seguir para avaliar e obviamente agregar os tópicos para cada certificação. Segue as informações:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Labs SDWAN:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;http://developer.cisco.com/sdwan&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;developer.cisco.com/sdwan&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Labs_SDWAN_Learning.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Labs Security:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;http://developer.cisco.com/security&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;developer.cisco.com/security&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Labs_Security_Learning.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Labs Datacenter NXOS:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;http://developer.cisco.com/nexusapi&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;developer.cisco.com/nexusapi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Labs_DC_NX_Learning.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;certificações-e-estudos&#34;&gt;Certificações e Estudos&#xA;&lt;/h1&gt;&lt;p&gt;   Temos também um resumo sobre todas as certificações e suas respectivas torres de tecnologias relacionadas para cada certificação, e podemos dizer que temos um longo trabalho e muitos estudos que podemos seguir. Isso de fato não é novidades para nós, mas sabemos que sempre precisamos estar se atualizando a cada dia. Sempre gosto de reforçar que de fato você não precisa ser um programador nativo, mas precisa ter alguns caminhos para criar suas facilidades e integrações que podem facilitar em seu dia a dia. Segue abaixo a informação resumida:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Certification_DevNet_KeyNote.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;              Uma outra nova notificação apresentada, esta relacionado com a capacitação dedicada a times ou parceiros queiram obter treinamentos mais direcionados, sendo ofertados pelo DevNet. Esse programa esta relacionado ao &lt;strong&gt;DevNet Automation Bootcamp&lt;/strong&gt; ( &lt;a class=&#34;link&#34; href=&#34;http://cs.co/AutomationBootcamp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;cs.co/AutomationBootcamp&lt;/a&gt; ) onde é preenchido um formulário baseado em seu interessse. Segue a informação abaixo, bem como um link para obter mais informações (&lt;a class=&#34;link&#34; href=&#34;https://developer.cisco.com/automation-bootcamp/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; https://developer.cisco.com/automation-bootcamp/&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Bootcamp.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;              Um outro programa que vai atrelar seria o &lt;strong&gt;“ Class of 2020 “&lt;/strong&gt;, onde esta relacionado a grupos de estudos para obter maiores conhecimentos, obviamente impulsionar seus estudos para suas certificações. Segue o link ( &lt;a class=&#34;link&#34; href=&#34;https://developer.cisco.com/classof2020/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://developer.cisco.com/classof2020/&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;h1 id=&#34;desconto-nas-certificações&#34;&gt;Desconto nas Certificações&#xA;&lt;/h1&gt;&lt;p&gt;              Agora uma das informações publicadas e podem ajudar você, onde já está estudando para sua certificação DevNet e tem planejamento para executar nos próximos meses será fantástico, pois terá um desconto de &lt;strong&gt;25%&lt;/strong&gt; no agendamento de sua prova. Porém, preste atenção, pois precisa fazer o registro entre o dia &lt;strong&gt;13 à 23&lt;/strong&gt;, onde o desconto aplicada para quem executar o exame de &lt;strong&gt;26 de Outubro&lt;/strong&gt; à &lt;strong&gt;6 de Novembro&lt;/strong&gt; de &lt;strong&gt;2020&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;              Vale lembrar, que os exames ainda podem ser executados remotamente e todos eles são agendados através do Parceiro &lt;strong&gt;VUE&lt;/strong&gt;. Para isso você deve acessar o website do DevNet ( &lt;a class=&#34;link&#34; href=&#34;http://cs.co/create2020offer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;cs.co/create2020offer&lt;/a&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Discount_Create_2020.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;comunidade-devnet&#34;&gt;Comunidade DevNet&#xA;&lt;/h1&gt;&lt;p&gt;              Para finalizar foi apresentado alguns números relacionados a comunidade e ao crescimento.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNet_Number_Create_2020.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;conclusão&#34;&gt;Conclusão&#xA;&lt;/h1&gt;&lt;p&gt;              Enfim, tentei resumir um pouco das informações que capturei neste dia, obviamente mais informações estão sendo populadas no website e outros caminhos para execução desses laboratório, estudos, aprendizagem, etc.&lt;/p&gt;&#xA;&lt;p&gt;              Se você tem mais informações e gostaria de divulgar deixe seu comentário.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>BLOG – DevNet Create 2020 – Participe!!</title>
            <link>https://ciscoredes.com.br/2020/10/12/blog-devnet-create-2020-participe/</link>
            <pubDate>Mon, 12 Oct 2020 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2020/10/12/blog-devnet-create-2020-participe/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNetCreate960x320.jpg&#34; alt=&#34;Featured image of post BLOG – DevNet Create 2020 – Participe!!&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2020/10/DevNetCreate960x320.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;Não sei se todos me seguem em alguma de nossas mídias, entretanto acredito que vale a pena reforçar em um post para que todos possa saber e obviamente participar.&lt;/p&gt;&#xA;&lt;p&gt;No dia &lt;strong&gt;13 de Outubro&lt;/strong&gt; inicia-se o &lt;strong&gt;DevNet Create&lt;/strong&gt;, que terá sua cobertura sendo atendida em suas 3 regiões com horários distintos de término, isso deve-se com o intuito de atender de forma mais ampla cada indivíduo espalhando pelo mundo. 🙂&lt;/p&gt;&#xA;&lt;p&gt;Gostaria também divulgar um video que gravei junto com a &lt;a class=&#34;link&#34; href=&#34;https://www.linkedin.com/in/silviakspiva&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Silvia Spiva&lt;/a&gt; – &lt;strong&gt;Engagement Leader Devnet&lt;/strong&gt;, para atingir essa fatia brasileira e trazer cada vez mais Engenheiros, Programadores e Exploradores para esse mundo, que hoje tem a intenção de agregar entre áreas de desenvolvimento, automação de redes, segurança, colaboração, etc.&lt;/p&gt;&#xA;&lt;p&gt;Antes que vocês fiquem preocupados ou imaginem que virei um programador, isso de fato é mentira a ideia é que consigamos fazer algum processo automatizado para nosso dia a dia, entretanto não existe a necessidade de você ser um programador nativo.&lt;/p&gt;&#xA;&lt;p&gt;Segue a chamada que gravei para publicar o evento e incentivar nossas comunidades, bem como para pensar nesses caminhos.&lt;/p&gt;&#xA;&lt;h1 id=&#34;agenda&#34;&gt;Agenda&#xA;&lt;/h1&gt;&lt;p&gt;Teremos 4 canais que estarão acontecendo ao mesmo tempo, e dentro deles você pode verificar qual apresentação se encaixa mais em seu perfil. Esses canais estão divididos entre:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DevNet Create\&lt;/li&gt;&#xA;&lt;li&gt;Creators\&lt;/li&gt;&#xA;&lt;li&gt;APIs in Action\&lt;/li&gt;&#xA;&lt;li&gt;Start Now&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Após isso, você pode adicionar em sua agenda e participar de cada um em seu respectivo horário. Eu estarei acompanhando mais agenda da região &lt;strong&gt;AMER&lt;/strong&gt; que está relacionado ao timezone PDT, e que na minha situação se enquadra melhor.&lt;/p&gt;&#xA;&lt;h1 id=&#34;inscrição&#34;&gt;Inscrição&#xA;&lt;/h1&gt;&lt;p&gt;Como todos já puderam observar esse ano o evento será online e FREE, o que acaba dando uma oportunidade ainda maior à todos participarem de sua própria casa em seu conforto, sem ter um gasto adicional.&lt;/p&gt;&#xA;&lt;p&gt;Para isso recomendo fazer o cadastro do &lt;a class=&#34;link&#34; href=&#34;https://bit.ly/3nFJuFh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DevNet Create 2020&lt;/a&gt;  o quanto antes e já verificar sua agenda.&lt;/p&gt;&#xA;&lt;p&gt;Espero todos lá!&lt;/p&gt;&#xA;&lt;p&gt;Abraços,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>BLOG – Cisco Cert Insiders – Fóruns e Desafios = Prêmios</title>
            <link>https://ciscoredes.com.br/2019/07/16/blog-cisco-cert-insiders-foruns-e-desafios-premios/</link>
            <pubDate>Tue, 16 Jul 2019 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2019/07/16/blog-cisco-cert-insiders-foruns-e-desafios-premios/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2019/07/Cisco_Cert_Insiders_Logo.jpg&#34; alt=&#34;Featured image of post BLOG – Cisco Cert Insiders – Fóruns e Desafios = Prêmios&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2019/07/Cisco_Cert_Insiders_Logo.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Gostaria de passar um dica rápida para vocês sobre um site da Cisco denominado como ” &lt;strong&gt;Cisco Cert Insiders&lt;/strong&gt; “, onde ele esta atrelado a um fórum de discussão, bem como existe alguns desafios e informações adicionais que você pode participar e acumular pontos durante sua trajetória.&lt;/p&gt;&#xA;&lt;p&gt;   Esses desafios estão relacionados a revisões de conteúdo ( &lt;em&gt;Routing, Switching, Security, etc&lt;/em&gt; ) atrelados algumas vezes as provas da Cisco, como também dicas sobre os conteúdos de modo geral ( &lt;em&gt;DevNet, Noticias Cisco, etc&lt;/em&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Como mencionado você acumula pontos que posteriormente podem ser trocados com ” &lt;strong&gt;presentinhos&lt;/strong&gt; “. 🙂&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2019/07/Premios_Cisco_Cert_Insiders.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Para participar você precisa ter seu &lt;strong&gt;CSCO&lt;/strong&gt;, ou se desejar pode criar também através do site. Lembrando que hoje a plataforma Cisco de Autenticação está unificada para todos os acessos. &lt;/p&gt;&#xA;&lt;p&gt;   Para acessar a plataforma vá ao site &lt;a class=&#34;link&#34; href=&#34;https://ciscocert.influitive.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Cisco Cert Insiders&lt;/a&gt; e aproveite!!!&lt;/p&gt;&#xA;&lt;p&gt;   Espero que tenham gostado da dica e compartilhe com seus amigo.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Script Configuração usando Jinja2 – Parte 2</title>
            <link>https://ciscoredes.com.br/2018/03/13/ansible-script-configuracao-usando-jinja2-parte-2/</link>
            <pubDate>Tue, 13 Mar 2018 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2018/03/13/ansible-script-configuracao-usando-jinja2-parte-2/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_script_jinja2_executed.jpg&#34; alt=&#34;Featured image of post Ansible – Script Configuração usando Jinja2 – Parte 2&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Vamos continuar nossas explicações sobre as configurações ( &lt;strong&gt;scripts&lt;/strong&gt; ) que podemos fazer através de uma base externa ( &lt;strong&gt;csv&lt;/strong&gt; ) que iniciamos em nosso post &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2018/03/08/ansible-configuracao-via-csv-file-loops/&#34; &gt;anterior&lt;/a&gt;. &lt;/p&gt;&#xA;&lt;p&gt;   Muitas pessoas mencionaram que de fato isso poderia ser feito através de um arquivo ( &lt;strong&gt;yaml&lt;/strong&gt; ) ou propriamente sendo populado através de outra metodologia via ( &lt;strong&gt;group_vars&lt;/strong&gt; ). Concordo, mas lembre-se, que eu havia mencionado que baseado em nossa estrutura de pastas vocês vão entender até nosso ultimo post as opções que teremos para trabalhar dessa forma.&lt;/p&gt;&#xA;&lt;p&gt;   Como proposto vou trazer nossa variável ” &lt;strong&gt;vars_dict&lt;/strong&gt; ” para nossa pasta ( &lt;strong&gt;group_vars/all.yml&lt;/strong&gt; ) adicionando ela dentro de outra variável ( &lt;strong&gt;vars_from_csv&lt;/strong&gt; ), para que de fato possamos utiliza-lá fazendo referências dentro de nosso script de configuração. &lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;vars_from_csv: &amp;#34;{{ vars_dict }}&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Como demostrado nesse momento já temos todos os nossos valores ( &lt;strong&gt;variáveis&lt;/strong&gt; ) populadas, portanto, precisamos executar agora nosso template que irá capturar essas variáveis para inserir em nosso arquivo de configuração. &lt;/p&gt;&#xA;&lt;p&gt;   Dentro desse conceito “ &lt;strong&gt;DEVOPS&lt;/strong&gt; “, bem como para utilização com Ansible, umas das linguagens mais utilizadas para essas demandas é chamada de &lt;a class=&#34;link&#34; href=&#34;http://jinja.pocoo.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;JINJA2&lt;/a&gt;. Se vocês observarem a documentação ela também é utilizada como template para Python, portanto, desta forma você pode entender o porque da utilização nesse mundo de automação.&lt;/p&gt;&#xA;&lt;p&gt;   Sua documentação é bem extensa, mas gostaria de deixar documentado em nosso BLOG os principais ítens, que nesse primeiro momento seria para criar nosso arquivo de configuração. Eles estão relacionados aos loops e variáveis que temos que criar para utilizar em nossos equipamentos.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;ul&gt;&#xA;&lt;li&gt;{% … %} for Statements&lt;/li&gt;&#xA;&lt;li&gt;{{ … }} for Expressions to print to the template output&lt;/li&gt;&#xA;&lt;li&gt;{# … #} for Comments not included in the template output&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;h1 id=&#34;--for-line-statements&#34;&gt;… ## for Line Statements&#xA;&lt;/h1&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;   Para execução de nosso template iremos adicionar em nossa playbook inicial uma ” &lt;em&gt;role&lt;/em&gt; ” relacionado as tarefas que iremos executar para obter o jinja ( &lt;strong&gt;.j2&lt;/strong&gt; ).&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: JINJA AND CSVFILE&#xA;  hosts: all&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: LOOKUP IN CSV FILE&#xA;    include_role:&#xA;      name: lookup_csv_info&#xA;    when: ./excel/test.csv is defined&#xA;&#xA;  - name: EXECUTE JINJA2&#xA;    include_role:&#xA;      name: script_jinja2&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Após esse processo vamos construir nossa task via ” &lt;em&gt;template&lt;/em&gt; “, onde nosso arquivo de origem será ( &lt;strong&gt;.j2&lt;/strong&gt; ) transformando ele um arquivo destino ( &lt;strong&gt;.conf&lt;/strong&gt; ) que será posteriormente arquivo para executar em nossos equipamentos da infra-estrutura. Segue task do template:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: TEMPLATE&#xA;  template:&#xA;    src: ./template/script.j2&#xA;    dest: ./template/configuration/script_{{ inventory_hostname }}.conf&#xA;  with_items: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Como observado precisamos agora ter nosso ” &lt;em&gt;script.j2&lt;/em&gt; ” construido, onde será ele o criador da configuração utilizando nossas variáveis capturadas anteriormente. &lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;!&#xA;hostname {{ vars_from_csv.new_hostname }}&#xA;!&#xA;{% if vars_from_csv.DHCP == &amp;#39;true&amp;#39; %}&#xA;no ip dhcp conflict logging&#xA;ip dhcp excluded-address {{vars_from_csv.dhcp_exclude1_start}} {{vars_from_csv.dhcp_exclude1_end}}&#xA;!&#xA;ip dhcp pool POOL1&#xA;   network {{vars_from_csv.dhcp_network}} {{vars_from_csv.dhcp_netmask}}&#xA;   default-router {{vars_from_csv.dhcp_gateway}}&#xA;   dns-server 8.8.8.8 8.8.4.4&#xA;{% endif %}&#xA;!&#xA;interface loopback {{ vars_from_csv.id_loopback }}&#xA; description + Management +&#xA; ip address {{ vars_from_csv.ip_loopback }} {{ vars_from_csv.mask_loopback }}&#xA; no shutdown&#xA;!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   De fato o que podemos entender com essa metodologia é que podemos fazer ” &lt;strong&gt;loops&lt;/strong&gt; ” e a utilização de condicionais “ &lt;strong&gt;if&lt;/strong&gt; ” para que se tivermos um valor ( &lt;em&gt;” true/false ” ou ” 1/0 “&lt;/em&gt; ) eu posso tomar algumas decisões nessa configuração. Observem que estou colocando como exemplo a variável “ &lt;strong&gt;DHCP&lt;/strong&gt; ” sendo verdadeira ( ” &lt;em&gt;true&lt;/em&gt; ” ), que por consequência eu preciso implementar o DHCP, caso contrário eu não desejo implementar esse recurso em meus roteadores.&lt;/p&gt;&#xA;&lt;p&gt;   Com isso conseguimos observar que as alterações foram executadas utilizando nosso script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_script_jinja2_executed.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Para garantirmos que foi executado correto vamos observar nossos arquivos de configuração, criados para cada roteador.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_folders_arq_conf_routers.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Configuração do Roteador 1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Configuração do Roteador 2&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;!  hostname R1_floor1  !  no ip dhcp conflict logging  ip dhcp excluded-address 1.1.1.9 1.1.1.10  !  ip dhcp pool POOL1  network 1.1.1.8 255.255.255.248  default-router 1.1.1.1  dns-server 8.8.8.8 8.8.4.4  !  interface loopback 10  description + Management +  ip address 10.10.10.1 255.255.255.255  no shutdown  !&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;!  hostname R2_floor1  !  !  interface loopback 10  description + Management +  ip address 10.10.10.1 255.255.255.255  no shutdown  !&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;   Vale lembrar, que não estou fazendo o acesso aos equipamento para descarregar as informações ( &lt;strong&gt;scripts&lt;/strong&gt; ), pois não tenho todo esse inventário emulado nesse momento para inserir todos os roteadores. Caso tenha necessidade pode observar em nossos posts anteriores, mas a forma para implementar nos equipamentos seria adicionar essa task em nossa playbook ( &lt;strong&gt;./script_jinja2/tasks/main.yaml&lt;/strong&gt; ).&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- name: Execute Script&#xA;  ios_config:&#xA;    provider: &amp;#34;{{ creds }}&amp;#34;&#xA;    src: ./template/configuration/script_{{ inventory_hostname }}.conf&#xA;  with_items: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Talvez vocês devem estar se perguntando onde está o ” &lt;strong&gt;loop&lt;/strong&gt; ” da configuração. Exato, ele vai ser adicionado em nosso próximo post.  💡&lt;/p&gt;&#xA;&lt;p&gt;   Espero que vocês tenha gostado e deixem seus comentários.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Configuração via CSV File – Parte 1</title>
            <link>https://ciscoredes.com.br/2018/03/08/ansible-configuracao-via-csv-file-loops/</link>
            <pubDate>Thu, 08 Mar 2018 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2018/03/08/ansible-configuracao-via-csv-file-loops/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_tree_project_csv_file.jpg&#34; alt=&#34;Featured image of post Ansible – Configuração via CSV File – Parte 1&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Dando sequência as nossas publicações sobre Ansible, e como já comentei com vocês que estou pegando alguns exemplos que de fato são situações que nós Engenheiros de Rede acaba vivenciado para executar esse tipo de trabalho em nosso dia a dia, ou seja, venho com a pergunta. Vocês já receberam aquele Excel &lt;strong&gt;( .csv ),&lt;/strong&gt; para de fato fazer algumas alterações em seus equipamentos?&lt;/p&gt;&#xA;&lt;p&gt;   Se sim, acredito que você está no caminho correto, pois hoje, venho com mais um exemplo que vamos fazer as preparações para tratar nossos dados e posteriormente criar nossos arquivos de configuração que serão aplicados em nossos equipamentos &lt;strong&gt;Cisco ( IOS )&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Vale lembrar, para que seja efetivo nossa Automação precisamos ter um inventário consolidado, onde as informações relacionadas ao nossos equipamentos devem ser coerentes para futuro crescimento de nossa infra-estrutura. Se você ainda não acompanhou os posts anteriores, recomenda-se ler esses &lt;a class=&#34;link&#34; href=&#34;https://www.ciscoredes.com.br/category/ansible&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;tópicos sobre Ansible.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;   Como vocês podem observar vamos tratar nossos dados via um arquivo &lt;strong&gt;( .csv )&lt;/strong&gt;, que de alguma forma são valores/informações populadas através de outras fontes ( ferramentas, pessoas, etc ). Em nosso exemplo, estou colocando diversas informações que a principio vocês possam não entender, mas no decorrer de nossos posts isso fará sentido para o entendimento correto e as opções que podemos criar em nossa automação.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;inventory_hostname,DHCP,dhcp_exclude1_start,dhcp_exclude1_end,dhcp_network,dhcp_netmask,dhcp_gateway,new_hostname,id_loopback,ip_loopback,mask_loopback&#xA;R1,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R1_floor1,10,10.10.10.1,255.255.255.255&#xA;R2,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R2_floor1,10,10.10.10.1,255.255.255.255&#xA;R3,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R3_floor1,10,10.10.10.1,255.255.255.255&#xA;R4,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R4_floor1,10,10.10.10.1,255.255.255.255&#xA;R31,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R31_floor1,10,10.10.10.1,255.255.255.255&#xA;R32,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R32_floor1,10,10.10.10.1,255.255.255.255&#xA;R5,false,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R5_floor1,10,10.10.10.1,255.255.255.255&#xA;R6,true,1.1.1.9,1.1.1.10,1.1.1.8,255.255.255.248,1.1.1.1,R6_floor1,10,10.10.10.1,255.255.255.255&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Como vocês podem observar isso são exemplos e vocês podem adaptar conforme sua necessidade e as solicitações que são exigidas pelas diferentes áreas de sua empresa. Todo o desenvolvimento de nossa automação também é muito co-relacionada com a estrutura de pastas e arquivos que vamos utilizar dentro do Ansible, portanto segue a estrutura que estou utilizando para esse exemplo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_tree_project_csv_file.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Uma outra informação diferente dos exemplos citados em nossos posts sobre Ansible, é que estou criando como fictício todos esses roteadores em nosso arquivo de inventário ( &lt;strong&gt;./hosts&lt;/strong&gt; ), para que nosso exemplo seja mais robusto e obviamente no final de nosso exemplo irei demonstrar como aplicar as configurações. Segue meu inventário criado para esse exemplo:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[routers-client]&#xA;R1 ansible_host=192.168.0.22&#xA;R2 ansible_host=192.168.0.23&#xA;R31 ansible_host=192.168.0.24&#xA;R5 ansible_host=192.168.0.25&#xA;R6 ansible_host=192.168.0.26&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Tendo como base essas informações vamos trabalhar com um módulo que Ansible oferece que é de executar um “&lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/playbooks_lookups.html#the-csv-file-lookup&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; &lt;em&gt;lookup&lt;/em&gt;&lt;/a&gt; ” dentro de um arquivo &lt;strong&gt;( .csv )&lt;/strong&gt;. Para que nosso código seja mais estruturado minha playbook principal irá chamar minha “&lt;a class=&#34;link&#34; href=&#34;https://docs.ansible.com/ansible/latest/playbooks_reuse_roles.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; &lt;em&gt;role&lt;/em&gt; &lt;/a&gt;” definida como ( &lt;strong&gt;./lookup_csv_info.yaml&lt;/strong&gt; ).&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: JINJA AND CSVFILE&#xA;  hosts: all&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: LOOKUP IN CSV FILE&#xA;    include_role:&#xA;      name: lookup_csv_info&#xA;    when: ./excel/test.csv is defined&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Talvez vocês devem estar se perguntando o porque utilizar “ &lt;strong&gt;roles&lt;/strong&gt; ” dentro desse código? De fato a funcionalidade role é muito utilizada no sentido de trazer mais dinamismo, funcionalidade e flexibilidade  para seu código, pois eles podem se tornar difíceis de gerenciar e difíceis de manter com um único arquivo. As roles permitem que você crie playbooks mínimas que, em seguida, busque uma estrutura de diretório para determinar as etapas de configurações reais que precisam executar, bem como proceder para as próximas roles se anterior foi executada/validada da forma correta.&lt;/p&gt;&#xA;&lt;p&gt;   Seguindo essa linha de raciocínio, demostro agora a playbook específica que irá pesquisar todas as informações dentro de nosso arquivo ( &lt;strong&gt;.csv&lt;/strong&gt; ). Ressalto, que em nosso arquivo temos mais informações do que de fato existem ( &lt;em&gt;&lt;strong&gt;hostnames&lt;/strong&gt;&lt;/em&gt; ) nosso arquivo de ( &lt;strong&gt;./hosts&lt;/strong&gt; ), ou seja, estamos pesquisando em nossa planilha se existem elementos que coincidem com nosso inventário.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: GET VARIABLES FROM CSVFILE&#xA;  set_fact:&#xA;    vars_dict:&#xA;        DHCP: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=1 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        dhcp_exclude1_start: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=2 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        dhcp_exclude1_end: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=3 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        dhcp_network: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=4 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        dhcp_netmask: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=5 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        dhcp_gateway: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=6 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        new_hostname: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=7 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        id_loopback: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=8 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        ip_loopback: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=9 delimiter=,&amp;#39;) }}&amp;#34;&#xA;        mask_loopback: &amp;#34;{{ lookup(&amp;#39;csvfile&amp;#39;, &amp;#39;{{ inventory_hostname }} file=./excel/test.csv col=10 delimiter=,&amp;#39;) }}&amp;#34;&#xA;  with_items: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Para que possamos ver que as informações estão sendo capturadas vamos colocar uma task contendo debug de uma variável para observar o comportamento. Essa variável em nosso caso é ” &lt;strong&gt;var_dict&lt;/strong&gt; ” onde se tem todo o ” &lt;strong&gt;dicionário&lt;/strong&gt; ” com os valores populados de cada elemento. Para adicionar essa validação foi inserido o comando:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  - debug: var={{&amp;#39;vars_dict&amp;#39;}}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Desta forma temos esse output e a confirmação que os dados estão sendo populados corretamente.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2018/03/ansible_var_dictionary_csv_file.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que vocês observaram que temos todos os elementos que foram lidos/capturados baseado em cada coluna de nosso arquivo &lt;strong&gt;( .csv )&lt;/strong&gt; comparado ao nosso inventário em uma única “ &lt;em&gt;&lt;strong&gt;task&lt;/strong&gt;&lt;/em&gt; “. Porquê?&lt;/p&gt;&#xA;&lt;p&gt;   Isso está relacionado justamente com ” &lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/playbooks_loops.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;loops&lt;/a&gt; ” que podemos criar dentro de nossas “ &lt;em&gt;&lt;strong&gt;tasks&lt;/strong&gt;&lt;/em&gt; “, fazendo com que ele faça a mesma tarefa diversas vezes baseado no requisito que estamos utilizando. Para nosso exemplo estou usando a variável “ &lt;strong&gt;{{ inventory_hostname }}&lt;/strong&gt; “, justamente para que ela pesquise no arquivo todos os roteadores expostos no arquivo ( &lt;strong&gt;./hosts&lt;/strong&gt; ). Essa função pode ser observada através do ” &lt;strong&gt;with_items:&lt;/strong&gt; “.&lt;/p&gt;&#xA;&lt;p&gt;   Espero que vocês tenham gostado e no próximo post vou detalhar como trabalhar com esse dados. &lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-includes/images/smilies/mrgreen.png&#34; alt=&#34;:mrgreen:&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Instalar SSH usando processo de automação</title>
            <link>https://ciscoredes.com.br/2017/12/21/ansible-instalar-ssh-usando-processo-de-automacao/</link>
            <pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/12/21/ansible-instalar-ssh-usando-processo-de-automacao/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/tree_ansible_ssh.jpg&#34; alt=&#34;Featured image of post Ansible – Instalar SSH usando processo de automação&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Já faz um bom tempo que não escrevo aqui no BLOG, mas tudo isso é devido outras tarefas que estão tomando também um certo tempo ( recertificação CCIE, estudos DevOps, projetos particulares, aulas, treinamentos, etc ). Enfim, hoje venho aqui trazer uma situação real que acredito que diversos leitores de nosso canal podem vivenciar em sua infra-estrutura e de alguma forma já fizeram esse questionamento quando começei aqui explicar sobre Ansible 💡 . Você pode conferir nossos posts sobre &lt;a class=&#34;link&#34; href=&#34;https://www.ciscoredes.com.br/tag/ansible&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ansible aqui&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   De fato, vocês observaram que a todo momento o que implementamos usando essa ferramenta foi utilizando o processo de acesso remoto a nossos equipamentos, é claro, executando as operações necessarias via CLI. Mas qual é esse acesso remoto? **SSH. &lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-includes/images/smilies/mrgreen.png&#34; alt=&#34;:mrgreen:&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;**&lt;/p&gt;&#xA;&lt;p&gt;   Pois bem, se observarmos todos os módulos para Networking os acessos aos equipamentos é feito pela biblioteca &lt;a class=&#34;link&#34; href=&#34;http://www.paramiko.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;” Paramiko “&lt;/a&gt;, e antes da versão 2.4 do Ansible não tinhamos nenhum módulo para utilizarmos os acessos via Telnet. Devido a isso, foi criado na versão 2.4.0  um módulo para que pudessemos avaliar os equipamentos ou executar algum comando ( &lt;strong&gt;CLI&lt;/strong&gt; ) pelo acesso via Telnet. Esse módulo você pode conferir através desse link (&lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/telnet_module.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; Telnet no Ansible&lt;/a&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Baseado nesses fatos, a ideia é acessar os equipamento via telnet, implementar script para habilitar o SSH, e após essa configuração toda a nossa infra-estrutura já estaria apta para utilizar-se de uma metodologia de maior segurança para acesso remoto aos equipamentos e pronto para trabalharmos com qualquer outro módulo disponível dentro da estrutura do Ansible. O que posso dizer é, mais ou menos!!! &lt;/p&gt;&#xA;&lt;p&gt;   Como estamos pensando em automação vamos pontuar os ítens para que isso seja efetivo:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Acessar o equipamento via telnet.&lt;/li&gt;&#xA;&lt;li&gt;Verificar se o equipamento tem o ssh habilitado.&lt;/li&gt;&#xA;&lt;li&gt;Qual a versão implementada do SSH.&lt;/li&gt;&#xA;&lt;li&gt;Caso negativo, devemos instalar o script para acesso via SSH e importar a chave SSH para o host remoto da gerência para evitarmos as perguntas se queremos aceitar a chave em nosso primeiro acesso.&lt;/li&gt;&#xA;&lt;li&gt;Caso positivo, devemos importar a chave SSH para o host remoto da gerência para evitarmos as perguntas se queremos aceitar a chave em nosso primeiro acesso.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;   As dificuldades encontradas com o módulo telnet do Ansible é de fato capturar alguns logs ( utilizar pipe ) e fazer as tratativas dos outputs para obter somente o necessário, então o desafio foi encontrar biblioteca para usarmos nesta demanda. Depois de avaliar diferentes caminhos/testes e pedir ajuda à grupo discussão no &lt;a class=&#34;link&#34; href=&#34;https://networktocode.slack.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;SLACK Networktocode&lt;/a&gt; ( onde indico para todos com intuito adquirir experiências com essas pessoas, e claro, de uma comunidade que de fato ajuda muito nas dúvidas e idéias para desenvolvermos nossas soluções ), verifiquei poderíamos trabalhar com a biblioteca ” &lt;a class=&#34;link&#34; href=&#34;http://ntc-docs.readthedocs.io/en/latest/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ntc-ansible&lt;/a&gt; “, pois ela já oferece o acesso via telnet e temos diversos outputs ” &lt;strong&gt;show commands&lt;/strong&gt; ” formatados &lt;strong&gt;JSON&lt;/strong&gt; ” &lt;em&gt;JavaScript Object Notation&lt;/em&gt; “, onde a comunidade executou via TextFSM, trazendo assim esse ” &lt;em&gt;array&lt;/em&gt; ” para ficar de fato mais pratico a consulta de nossos outputs. Mas, nossa vida não é fácil, pois esse comando que é necessario em minha playbook não tinhamos pronto, porém não foi impactante devido a conseguir executar os filtros e capturar o output essencial do comando.&lt;/p&gt;&#xA;&lt;p&gt;   Para nossa estrutura de arquivos e pastas eu desenvolvi desta forma.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/tree_ansible_ssh.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Vocês podem observar que temos uma estrutura de ” &lt;em&gt;roles&lt;/em&gt; “, ” &lt;em&gt;templates&lt;/em&gt; ” e ” &lt;em&gt;output&lt;/em&gt; ” onde a principal pasta para corresponder a nossa playbook estaria dentro de roles, desta forma podemos fazer nossas validações ” &lt;em&gt;conditionals&lt;/em&gt; ” na playbook e trabalhar baseado nos outputs/status para as execuções das tarefas posteriores. Nosso arquivo raiz para iniciar implementação estaria em ” ssh_config.yaml “.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: INSTALL SSH IN CISCO DEVICES&#xA;  hosts: routers-client&#xA;  gather_facts: no&#xA;  connection: local&#xA;  vars:&#xA;    template_dir: /home/rodrigo/Documents/ansible/ntc-ansible/ntc-templates/templates/&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: INCLUDE SSH ENABLE ROLE&#xA;    include_role:&#xA;      name: ensure_ssh_enabled&#xA;&#xA;  - name: INCLUDE SSH KEY ON THE PATH .ssh/known_hosts&#xA;    include_role:&#xA;      name: get_ssh_key&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Como podem observar a primeira validação é garantir se temos implementado o SSH, e caso negativo, iremos fazer a implementação de nosso script. Dentro da estrutura de roles podemos ter diversos arquivos denominados com o mesmo nome, porém ele sempre irá buscar o arquivo main.yaml que é a base de nossa role.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: ACCESS BY TELNET&#xA;  ntc_show_command:&#xA;      connection: telnet&#xA;      platform: cisco_ios&#xA;      template_dir: &amp;#34;{{ template_dir }}&amp;#34;&#xA;      command: &amp;#34;{{ item }}&amp;#34;&#xA;      host: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;      username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;      password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;      secret: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;  with_items:&#xA;      - show ip ssh | include SSH Enabled - version 2&#xA;  register: ssh_telnet&#xA;&#xA;- name: ENABLE SSH IF REQUIRED&#xA;  include_tasks: enable_ssh.yaml&#xA;  when: &amp;#34;ssh_telnet.results.0.response.0 != &amp;#39;SSH Enabled - version 2.0&amp;#39;&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Para ficar mais claro vocês podem observar no debug ( via ah-hoc command ” &lt;strong&gt;-vvv&lt;/strong&gt; ” ) output sendo demostrado com valor essencial para validar via condição ( when ) de qualquer coisa que seja diferente de versão 2 , então ele irá chamar nossa próxima task para implementar nosso script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_response_ssh_version2.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PS.:&lt;/strong&gt; Nessa execução o valor é o mesmo comparado portando ele esta executando o ” &lt;em&gt;skipping&lt;/em&gt; “&lt;/p&gt;&#xA;&lt;p&gt;   Em nossa próxima task temos novamente o acesso sendo executado via telnet e a implementação dos comandos necessário para subirmos o protocolo SSH, liberando assim esse equipamento para seus devidos fins.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: INSTALL SSH TEMPLATE&#xA;  ntc_config_command:&#xA;      connection: telnet&#xA;      platform: cisco_ios&#xA;      host: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;      username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;      password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;      secret: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;      commands_file: &amp;#34;/home/rodrigo/Documents/ansible/IWAN Project/ssh_installation_by_telnet/template/ssh_configuration.txt&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Após toda essa validação e configuração ( se necessario ) nós precisamos fazer com que nosso host tenha essa chave inserida em seu arquivo de controle ( &lt;strong&gt;~/.ssh/known_hosts&lt;/strong&gt; ) para que ele não faça essa pergunta chata quando for acessar pela primeira vez seu equipamento.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_answer_ssh_accept.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Para isso, iremos ter nossa próxima role para trazer essas validações e inserções dentro do arquivo necessário. Após chamar role ” &lt;strong&gt;get_ssh_key&lt;/strong&gt; ” iremos novamente ter nosso arquivo &lt;strong&gt;main.yaml&lt;/strong&gt; sendo executado e nele iremos tratar as informações.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: ACCESS BY TELNET&#xA;  ntc_show_command:&#xA;      connection: telnet&#xA;      platform: cisco_ios&#xA;      template_dir: &amp;#34;{{ template_dir }}&amp;#34;&#xA;      command: &amp;#34;{{ item }}&amp;#34;&#xA;      host: &amp;#34;{{ inventory_hostname }}&amp;#34;&#xA;      username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;      password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;      secret: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;  with_items:&#xA;      - show ip ssh | begin ^ssh-rsa&#xA;  register: ssh_key&#xA;&#xA;- name: Save output in variable related inline command&#xA;  set_fact: myvar=&amp;#34;{{ ssh_key.results.0.response.0 }}&amp;#34;&#xA;  when: ssh_key is defined&#xA;&#xA;- name: Replace space inside myvar&#xA;  set_fact:&#xA;    clean: &amp;#34;{{ myvar.replace(&amp;#39;\n&amp;#39;,&amp;#39;&amp;#39;) }}&amp;#34;&#xA;  when: ssh_key is defined&#xA;&#xA;- name: ADD KEY INSIDE LOCALHOST OF SSH CONNECTION&#xA;  lineinfile:&#xA;    path: ~/.ssh/fake_hosts&#xA;    state: present&#xA;    line: &amp;#34;{{ inventory_hostname }} {{ clean }}&amp;#34;&#xA;    insertafter: EOF&#xA;  when: ssh_key is defined&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Um dos problemas enfrentados nesse tópico foi justamente a comparação da chave existente com o fato de possívelmente eu já ter essa chave inserida em seu arquivo de hosts, portanto dependendo de sua infra-estrutura essas informações poderiam ficar duplicadas e também a cada execução ele salvar a mesma chave em seu arquivo. Para validação no arquivo temos um módulo muito interessante chamado ” &lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/lineinfile_module.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;em&gt;lineinfile&lt;/em&gt;&lt;/a&gt; ” que de fato ele pesquisa no arquivo se temos essa informação, caso negativo, ele insere o que foi solicitado. Como dito o problema sobre a inserção toda vez que executava a playbook ficava atrelado algum espaço ( &lt;strong&gt;\n&lt;/strong&gt; ) que ele tinha do output ficando interpretável para o modulo &lt;em&gt;lineinfile&lt;/em&gt;, com isso precisou ser feito um ” &lt;em&gt;replace&lt;/em&gt; ” desses espaços para que pudesse comparar minha variável com o arquivo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PS.:&lt;/strong&gt; Vocês vão observar que criei um arquivo ” &lt;strong&gt;fake_hosts&lt;/strong&gt; ” justamente para que você não fique testando dentro de seu arquivo de produção e de alguma forma possa impactar aquilo que esta funcionado, portanto criei o arquivo para você validar os seus passos e analisar se esta sendo executado da maneira correta, pois no momento de rodar talvez em cima de 100, 300 devices o rollback pode ficar complicado. ( rsrs )&lt;/p&gt;&#xA;&lt;p&gt;   Vamos partir do principio que não temos nada instalado em nosso equipamento e a configuração que será implementado é conforme abaixo. &lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;!&#xA;username ssh privilege 15 password 0 sshansible&#xA;!&#xA;ip domain-name cisco.com&#xA;!&#xA;crypto key generate rsa modulus 2048&#xA;!&#xA;ip ssh version 2&#xA;ip ssh source-interface g3&#xA;ip ssh time-out 5&#xA;!&#xA;line vty 0 4&#xA; login local&#xA; transport input all&#xA;!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Abaixo você pode conferir que removi toda a configuração de ssh e deletei no meu arquivo de teste para garantir que não temos nada populado.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_removed_config_fakehosts.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Com isso, em nosso próximo output você poderá observar que de fato não consigo fazer nenhum acesso &lt;strong&gt;SSH&lt;/strong&gt;, e após execução de nossa playbook ( capturando duas changes ) temos de fato implementado nosso script e chave inserida. O erro mencionado abaixo em meu detalhamento refere-se ao fato de eu não ter salvo nossa chave &lt;strong&gt;SSH&lt;/strong&gt; no arquivo correto, devido ao que foi comentando logo acima.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_execute_ssh_insert.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Para garantir podemos acessar nosso equipamento e consolidar as informações relacionados ao script implementado, bem como, adicionei um novo usuario.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_cli_ssh_user.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Validando nosso arquivo ” &lt;em&gt;fake_hosts&lt;/em&gt; ” para garantir que temos a mesma chave inserida no arquivo e comparado ao nosso equipamento.\&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_key_detail_fakehosts.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Vale lembrar que, o foi adicionado em nosso arquivo de ” &lt;em&gt;known_hosts&lt;/em&gt; ” é o hostname, portanto se você acessa seus equipamentos pelo nome ele terá essa menção adicionado no arquivo, porém se o DNS não resolver esse nome você terá que acessar pelo endereço IP e que nesse caso não é a mesma informação que populamos em nosso arquivo de “ &lt;em&gt;known_hosts&lt;/em&gt; “, sendo assim ele irá questionar para adicionar sua chave.&lt;/p&gt;&#xA;&lt;p&gt;   Logo abaixo, coloco alguns exemplo para garantir o correto funcionamento, colocando hipóteses de alguns itens que podemos obter durante a implementação que diversos hosts. &lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_ssh_instalado_device.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Nesse caso foi removido apenas ” &lt;em&gt;no ip ssh version 2&lt;/em&gt; ” para que possamos implementar o script, mas não inserir chaves duplicadas em nosso arquivo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/12/ansible_version_nao_instalado_key_inserida.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Declaro que esse post ficou bem grande, porém quis demonstrar todas as possibilidades colocando os outputs e anuências que foram vivenciadas até o desenvolvimento dessa automação.&lt;/p&gt;&#xA;&lt;p&gt;   Espero que vocês tenham gostado e de fato ajude de alguma forma a solucionar problemas vivenciados em seu dia a dia. Fique a vontade de compartilhar esse artigo e de colocar mais sugestões ou melhorias para essa estrutura.&lt;/p&gt;&#xA;&lt;p&gt;   Esses códigos estão disponivéis também no meu Github.  😛 &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Módulo Networking</title>
            <link>https://ciscoredes.com.br/2017/11/24/ansible-modulo-networking/</link>
            <pubDate>Fri, 24 Nov 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/11/24/ansible-modulo-networking/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/11/Ansible_Mod_Networking_Webinar_Novembro.jpg&#34; alt=&#34;Featured image of post Ansible – Módulo Networking&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que vocês vêem acompanhando sobre os posts que estou descrevendo sobre essa nova tecnologia de ” &lt;strong&gt;DevOps&lt;/strong&gt; ” para qual estou me atualizando baseado em Ansible.&lt;/p&gt;&#xA;&lt;p&gt;   Devido a isso gostaria de divulgar algumas informações adicionais para vocês que também estão se interessando nesse tópico, trazendo assim um histórico para nosso BLOG sobre essa comunidade que está crescendo e principalmente os módulos de networking está tendo uma visbilidade muito importante não somente da RedHat, mas em relação também as vendors de oferecerem essas facilidades para comunidade.&lt;/p&gt;&#xA;&lt;p&gt;   Com isso, gostaria de agregar aquilo que já comentei em nosso 3 post sobre o módulo de networking, bem como agora podemos acompanhar evolução ( roadmap ) das novas versão que estão para chegar. Aqui são slides que capturei para apresentar para vocês, porém se desejam ver na integra temos o &lt;a class=&#34;link&#34; href=&#34;https://www.ansible.com/webinars-training/ask-an-expert-networking-nov-2017&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ansible Webinar Networking.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/11/Ansible_Mod_Networking_Webinar_Novembro.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/11/Ansible_MVPA_Webinar_Novembro.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/11/Ansible_Roadmaps_Webinar_Novembro.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;br&gt;&#xA;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Validação de Configuração – Parte 3</title>
            <link>https://ciscoredes.com.br/2017/10/30/ansible-validacao-de-configuracao-parte-3/</link>
            <pubDate>Mon, 30 Oct 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/10/30/ansible-validacao-de-configuracao-parte-3/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible-Compare_running_startup_CLI_add_user.jpg&#34; alt=&#34;Featured image of post Ansible – Validação de Configuração – Parte 3&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Seguindo em nossos posts, continuamos trabalhando para fazer nossas comparações entre as configurações que estão aplicadas em nosso ambiente. Hoje vamos tratar sobre a validação do módulo ” &lt;strong&gt;startup-config&lt;/strong&gt; “.&lt;/p&gt;&#xA;&lt;p&gt;   Como vocês observaram anteriormente, sempre estavamos validando situações onde iríamos comparar arquivos ( &lt;em&gt;&lt;strong&gt;scripts&lt;/strong&gt;&lt;/em&gt; ) que poderiam ser aplicados em nossos equipamentos ou validados no sentido de possíveis alterações que de fato não se equipara com nossa base ( &lt;em&gt;&lt;strong&gt;backup&lt;/strong&gt;&lt;/em&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Logo abaixo, iremos fazer uma validação simples entre “ &lt;em&gt;startup-config&lt;/em&gt; ” com a ” &lt;em&gt;running-config&lt;/em&gt; “, com isso temos outro motivo para possíveis troubleshooting identificar rapidamente se algo foi alterado, e se de fato essa alteração foi feita da maneira correta, sempre lembrando-se que, essas alterações podem aparecer desde que ainda não foram salvas na &lt;strong&gt;NVRAM&lt;/strong&gt;. Abaixo temos o script:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- hosts: all&#xA;  connection: local&#xA;  gather_facts: no&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Fill vars&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: Compare startup-config with running-config&#xA;    ios_config:&#xA;      diff_against: startup&#xA;      provider: &amp;#34;{{ provider }}&amp;#34;&#xA;    register: test_diff&#xA;&#xA;  - name: Take startup-config and sets it to a variable called *before*&#xA;    set_fact: before=&amp;#34;{{ test_diff[&amp;#39;diff&amp;#39;][&amp;#39;before&amp;#39;].split(&amp;#39;\n&amp;#39;)}}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: This takes the running_config and sets it to a variable called *after*&#xA;    set_fact: after=&amp;#34;{{ test_diff[&amp;#39;diff&amp;#39;][&amp;#39;after&amp;#39;].split(&amp;#39;\n&amp;#39;)}}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: Create a line-to-line diff of running-config to startup_config&#xA;    set_fact: difference=&amp;#34;{{ after | difference(before) }}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: sanitized output &amp;#34;Lines added to running-config that are not present in startup_config&amp;#34;&#xA;    debug:&#xA;      var: difference&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Vale ressaltar que utilizamos a mesma técnica já explicada anteriormente, onde temos que “ &lt;em&gt;sanitizar&lt;/em&gt; ” as diferenças para que de fato tenhamos a saída mais ” &lt;em&gt;clean&lt;/em&gt; ” possível, e claro de fácil visualização. No primeiro momento, como vocês vão perceber apenas executei nossa playbook para demonstrar que de fato meu equipamento foi ligado e permanece com a mesma configuração. &lt;/p&gt;&#xA;&lt;p&gt;   A mensangem ” &lt;em&gt;skipping&lt;/em&gt; ” é justamente para mencionar que nossa variável esta ” &lt;em&gt;zerada&lt;/em&gt; ” e que essa tarefa está sendo pulada para as tarefas seguintes. Segue abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible-Compare_running_startup_no_difference.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Agora, como já temos tudo garantido, vamos novamente fazer uma alteração em nosso roteador relacionado a um novo usuário, e claro, não vamos salvar em nossa NVRAM.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible-Compare_running_startup_CLI_add_user.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Feito isso, agora esperamos que após execução da playbook iremos visualizar que nosso novo usuário foi inserido na ” &lt;em&gt;&lt;strong&gt;running-config&lt;/strong&gt;&lt;/em&gt; “. Segue abaixo o output trazendo assim a linha adicional:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible-Compare_running_startup_show_difference.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Com isso, finalizamos nossas 3 opções de validação de configuração, para qual pode atender diversas opções dentro de nosso ambiente de produção ou mesmo de futuros laboratórios. Pensando assim, vendo nossas demonstrações você avalia que isso de fato pode automatizar algum processo que hoje você precisa executar manualmente ou não consiga gerenciar suas configurações de equipamentos? O que seria mais interessante? &lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PS.:&lt;/strong&gt; Vale lembrar novamente que estamos executando somente em um roteador, porém isso, pode ser escalável a muitos equipamentos, apenas alterando nosso arquivo de hosts.&lt;/p&gt;&#xA;&lt;p&gt;   Deixe seus comentários.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Validação de Configuração – Parte 2</title>
            <link>https://ciscoredes.com.br/2017/10/26/ansible-validacao-de-configuracao-parte-2/</link>
            <pubDate>Thu, 26 Oct 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/10/26/ansible-validacao-de-configuracao-parte-2/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_running_intended_user_created_IOS.jpg&#34; alt=&#34;Featured image of post Ansible – Validação de Configuração – Parte 2&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Conforme em nosso post &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/10/23/ansible-validacao-de-configuracoes/&#34; &gt;anterior&lt;/a&gt;, hoje iremos tratar de um outro parâmetro, com o intuito de fazer validação das configurações em nossos equipamentos Cisco. &lt;/p&gt;&#xA;&lt;p&gt;   Baseando-se em nossas menções a configuração que iremos “&lt;em&gt;confrontar&lt;/em&gt;” será a diferença que temos na “&lt;em&gt;running-config&lt;/em&gt;” com nosso arquivo base ( &lt;strong&gt;intended&lt;/strong&gt; ), ou seja, nesse post iremos agora mostrar o que temos de comandos adicionais na configuração que não esta presente em nosso arquivo padrão.&lt;/p&gt;&#xA;&lt;p&gt;   Vale lembrar que essa comparação será linha à linha, ou seja, para que isso faça mais sentido o ideal que você já tenha um template padrão de sua infra-estrutura aplicado para seus equipamentos, bem como, já tenha um histórico de armazenamento de configurações para começar a “&lt;em&gt;confrontar&lt;/em&gt;” as configuração. É claro, que se você não tem, o importante é iniciar seu processo para backup de configuração ou criar políticas para que esse processo entre em produção, assim posteriomente, você pode revalidar suas configurações com o desejo de encontrar algo que foi alterado e que não deveria.  😉 &lt;/p&gt;&#xA;&lt;p&gt;   Enfim, vamos ao nosso playbook onde iremos criar a validação. Devido ao teste eu acabei criando um processo anterior nesse script, baseando-se em configurações já apresentadas em posts anteriores sobre criação do “&lt;em&gt;running-config&lt;/em&gt;“, devido a isso, eu apenas importei esse script para nosso playbook com a intenção de conseguir criar o arquivo inicial, e após isso, criar duas situações para comparar o antes e depois da mudança em nossa configuração do roteadore CSR1000V.&lt;/p&gt;&#xA;&lt;p&gt;   Segue abaixo nossa playbook&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- hosts: all&#xA;  connection: local&#xA;  gather_facts: no&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Fill vars&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: Capture running-config&#xA;    ios_command:&#xA;     provider: &amp;#34;{{ provider }}&amp;#34;&#xA;     commands:&#xA;        - show running-config&#xA;    register: running&#xA;    &#xA;  - name: Check that file exist&#xA;    stat:&#xA;      path: /home/rodrigo/Documents/ansible/IWAN Project/backup/{{ inventory_hostname }}_running.txt&#xA;    register: result_file&#xA;&#xA;  - name: Save output running-config&#xA;    copy:&#xA;      content: &amp;#34;{{ running.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/IWAN Project/backup/{{ inventory_hostname }}_running.txt&amp;#34;&#xA;    when: result_file.stat.exists == False&#xA;&#xA;  - name: Compare running-config with intended file&#xA;    ios_config:&#xA;      diff_against: intended&#xA;      provider: &amp;#34;{{ provider }}&amp;#34;&#xA;      intended_config: &amp;#34;{{ lookup(&amp;#39;file&amp;#39;, &amp;#39;/home/rodrigo/Documents/ansible/IWAN Project/backup/{{ inventory_hostname }}_running.txt&amp;#39;) }}&amp;#34;&#xA;    register: test_diff&#xA;&#xA;  - name: Take running-config and sets it to a variable called *before*&#xA;    set_fact: before=&amp;#34;{{ test_diff[&amp;#39;diff&amp;#39;][&amp;#39;before&amp;#39;].split(&amp;#39;\n&amp;#39;)}}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: This takes the intended_config and sets it to a variable called *after*&#xA;    set_fact: after=&amp;#34;{{ test_diff[&amp;#39;diff&amp;#39;][&amp;#39;after&amp;#39;].split(&amp;#39;\n&amp;#39;)}}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: Create a line-to-line diff of running-config to intended_config&#xA;    set_fact: difference=&amp;#34;{{ after | difference(before) }}&amp;#34;&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&#xA;  - name: sanitized output &amp;#34;Lines added to running-config that are not present in intended_config&amp;#34;&#xA;    debug:&#xA;      var: difference&#xA;    when: test_diff[&amp;#39;diff&amp;#39;] is defined&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   No primeiro momento vocês podem observar que minha pasta não contém o arquivo, pois é a primeira vez que irei executar minha playbook. Após executar, vocês podem observar que tenho a mensagem de “ &lt;em&gt;change&lt;/em&gt; ” em nosso “ &lt;em&gt;log&lt;/em&gt; ” e consequentemente vamos observar que foi populado um novo arquivo em nosso servidor local ( &lt;strong&gt;ansible server&lt;/strong&gt; ). \&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_output_running_intended_file_created.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;br&gt;&#xA;   Após criação de nosso arquivo, nesse momento é efetuado alteração em meu roteador ( &lt;strong&gt;running-config&lt;/strong&gt; ) criando um usuário adicional, para que assim possamos validar as diferenças de configurações que existem entre nossas bases. Segue abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_running_intended_user_created_IOS.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Com isso vocês agora podem observar que foi criado uma lógica de validação em relação ao meu arquivo de configuração ( &lt;strong&gt;running-config&lt;/strong&gt; ), para que após a execução pela primeira vez da running-config ele não fique sobrescrevendo meu arquivo, para que desta forma, ela seja, minha configuração base ( &lt;strong&gt;intended&lt;/strong&gt; ) que vou comparar posteriormente com o running-config. Abaixo você pode observar que existe uma ação ( skipping ) que é o momento de validação do arquivo existente, sendo que minha váriavel agora é ” &lt;em&gt;True&lt;/em&gt; ” devido a isso minha tarefa em nossa playbook, não sera de fato executada ( &lt;strong&gt;gravar um novo arquivo&lt;/strong&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Podemos também observar outras ações que estão ocorrendo que é justamente as menções de diferenças entre os arquivos, que é demonstrador através do ” &lt;em&gt;before&lt;/em&gt; ” e “ &lt;em&gt;after&lt;/em&gt; “. Para que vocês possam entender o que representa &lt;a class=&#34;link&#34; href=&#34;https://unix.stackexchange.com/questions/81998/understanding-of-diff-output&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;output em azul trazendo numeros é simbolo é recomendado que visualize esse link&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_output_running_intended_final.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;br&gt;&#xA;   Após todo essa validação o ideal que você faça as comparações do antes e depois de forma mais prática para seu output, pois, você pode obter linhas que de fato são adicionais em seu output, mas que de fato não foram alteradas. Devido a isso, foi necessário criar uma revalidação e ” &lt;em&gt;sanitizar&lt;/em&gt; ” output utilizando as variáveis “ &lt;em&gt;before&lt;/em&gt; ” e ” &lt;em&gt;after&lt;/em&gt; ” para que possamos no final visualizar somente a linha que eu adicionei no running-config. Com esse output podemos concluir que de fato agora tenho uma alteração em meu equipamento que não deveria estar contido nele.&lt;/p&gt;&#xA;&lt;p&gt;   Espero que esse playbook possa dar um dinamismo maior para sua infra, na qual você precisa validar se algo foi alterado ( &lt;strong&gt;change&lt;/strong&gt; ) em seu equipamento e que de fato posso ter impactado algum incidente reportado posteriomente sua change. Vale lembra que aqui estamos fazendo os testes em apenas 1 equipamento para qual a ideia é que isso possa ser escalonado dentro de seu ambiente.  😀 &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Validação de Configurações</title>
            <link>https://ciscoredes.com.br/2017/10/23/ansible-validacao-de-configuracoes/</link>
            <pubDate>Mon, 23 Oct 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/10/23/ansible-validacao-de-configuracoes/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_version_2_4.jpg&#34; alt=&#34;Featured image of post Ansible – Validação de Configurações&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_version_2_4.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Enfim, depois de um longo periodo voltamos para trazer mais tópicos sobre nossa estrutura de DevOps utilizando Ansible. Acredito que algumas pessoas devem ter visto que a RedHat fez anúncio sobre atualização do &lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/devel/release_and_maintenance.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ansible para a versão 2.4&lt;/a&gt;, e se observarem o módulo de networking foi o que teve a maior quantidade de release, portanto podemos observar que o projeto e a comunidade esta empenhanda em trazer mais beneficios para nossa área. Segue a menção explicada pelo engenheiro do modulo de &lt;a class=&#34;link&#34; href=&#34;https://www.ansible.com/blog/networking-features-in-ansible-2-4&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;networking da RedHat&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;   Para critério de equiparação eu já fiz atualização para a nova versão, pois nossos exemplos e laboratórios já estão com os novos módulos. Segue a versão que estamos trabalhando nesse momento.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;h5 id=&#34;rootubuntuhomerodrigo-ansible-version-ansible-2400-config-file--etcansibleansiblecfg-configured-module-search-path--urootansiblepluginsmodules-uusrshareansiblepluginsmodules-ansible-python-module-location--usrlibpython27dist-packagesansible-executable-location--usrbinansible-python-version--2712-default-nov-19-2016-064810-gcc-540-20160609&#34;&gt;root@ubuntu:/home/rodrigo# ansible –version ansible 2.4.0.0 config file = /etc/ansible/ansible.cfg configured module search path = [u’/root/.ansible/plugins/modules’, u’/usr/share/ansible/plugins/modules’] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]&#xA;&lt;/h5&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;   Como estamos trabalhando em exemplos sobre backups de configuração, historico de configuração, neste post vou trazer algumas funcionalidades que temos agora para comparar nossas configurações e obter outputs que podem trazer beneficios em nosso dia a dia. O módulo voltado para Cisco, onde iremos trabalhar seria “&lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/ios_config_module.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; ios_config&lt;/a&gt; “, que por sua vez, teve algumas alterações nessa nova edição. Para contextualizar, existem algumas possibilidades que dependendo do seu ambiente podem-se enquadrar de uma forma diferente, portanto, para nosso caso eu irei criar um arquivo ( .conf ) que iremos apenas adicionar usuários para que possamos comparar nossas configurações. Segue exemplo de meu arquivo:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;!&#xA;username R1 privilege 15 password 0 rodrigo3&#xA;username teste2 privilege 15 password 0 rodrigo3&#xA;username teste12 privilege 15 password 0 teste&#xA;!&#xA;!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PS.: Não é obrigatório a criação do arquivo como sendo ( .conf ), ele pode ser como texto e utilizar a estrutura que você tem em seu ambiente. &lt;/p&gt;&#xA;&lt;p&gt;   Após a criação de nosso arquivo base, iremos construir nosso playbook para que possamos fazer as comparações das configurações. Neste primeiro exemplo, iremos fazer a comparação da ” running-config ” com o arquivo base, e assim output que irá trazer em nossa variavél será a diferença entre os dois arquivos.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- hosts: all&#xA;  connection: local&#xA;  gather_facts: no&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Fill vars&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: Compare running-config with base file&#xA;    ios_config:&#xA;      diff_against: running&#xA;      provider: &amp;#34;{{ provider }}&amp;#34;&#xA;      src: /home/rodrigo/Documents/ansible/input/{{ inventory_hostname }}.conf&#xA;    register: test_diff&#xA;&#xA;  - debug: var=test_diff.updates&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Com isso, podemos agora fazer nossa validação através de nosso playbook utilizando comando ad-hoc ( –check ). Vale lembrar que o &lt;em&gt;“check”&lt;/em&gt; não irá popular nenhuma configuração em seu equipamento.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_compare_running.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Assim podemos comparar com nossa configuração apresentada em nosso roteador que os usuários não estão presentes em nossa configuração ( running-config ), entretanto vocês podem observar que temos um usuario ( rodrigo ) que o mesmo não foi demostrado em nosso output. Porque?&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/10/Ansible_running_config.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;br&gt;&#xA;   Isso ocorre porque a validação que é feita é somente a comparação do &lt;strong&gt;R1.conf&lt;/strong&gt; com a &lt;strong&gt;running-config&lt;/strong&gt;, trazendo assim somentes as diferenças ( &lt;strong&gt;check&lt;/strong&gt; ) do que temos na configuração base com o que está no roteador ( &lt;strong&gt;running-config&lt;/strong&gt; ), e não o inverso. Teremos outras funções para que essa diferença também seja apresentada.&lt;/p&gt;&#xA;&lt;p&gt;   Devido a este ponto, para os próximos posts irei trazer mais validações usando essa nova funcionalidade ( diff_against ).&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Cisco DevNet Webinar – Netacad – Sessão 2</title>
            <link>https://ciscoredes.com.br/2017/09/06/cisco-devnet-webinar-netacad-sessao-2/</link>
            <pubDate>Wed, 06 Sep 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/09/06/cisco-devnet-webinar-netacad-sessao-2/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/07/DevNet_Webinar_Netacad.jpg&#34; alt=&#34;Featured image of post Cisco DevNet Webinar – Netacad – Sessão 2&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/07/DevNet_Webinar_Netacad.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Eu já havia comentado sobre esse tópico em nosso &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/07/20/cisco-devnet-webinar-netacad/&#34; &gt;post de Julho&lt;/a&gt;, e hoje venho para avisar sobre a próxima sessão que será feita neste mês ( &lt;strong&gt;14/09/2017&lt;/strong&gt; ). Não sei se todos assistiram Webinar anterior, mas nesse evento será comentado sobre mais alguns ítens sobre o entendimento de conceitos básicos de software e código e vantagens que engenheiro de redes pode ganhar colaborando with desenvolvimento de software. Irá ser feito uma pequena demo mostrando codificação Python e JSON&lt;/p&gt;&#xA;&lt;p&gt;   Você pode conferir com mais detalhes através do &lt;a class=&#34;link&#34; href=&#34;https://www.netacad.com/hr/web/netacad-advantage/prepare-for-work-blog/-/blogs/cisco-devnet-webinar-series-?_33_redirect=%2Fhr%2Fweb%2Fnetacad-advantage%2Fhome%3F&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;link do NETACAD&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Notificação BOT Telegram</title>
            <link>https://ciscoredes.com.br/2017/09/04/ansible-notificacao-bot-telegram/</link>
            <pubDate>Mon, 04 Sep 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/09/04/ansible-notificacao-bot-telegram/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/09/notifica%C3%A7%C3%A3o_telegram_ansible.jpg&#34; alt=&#34;Featured image of post Ansible – Notificação BOT Telegram&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Seguindo nossa sequência sobre Ansible, hoje gostaria de trazer um adendo que estaria envolvido simplesmente em criar uma notificação que poderá ser exibida no Telegram, através de nossos famosos e tão comentado &lt;strong&gt;BOTs&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Para que todo esse processo funcione, você terá a necessidade de criar um &lt;em&gt;BOT&lt;/em&gt; simples pelo Telegram, para isso você pode interagir com nosso amigo &lt;a class=&#34;link&#34; href=&#34;https://telegram.me/botfather&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;@BotFather&lt;/a&gt;. Se necessitar de mais informações sobre os procedimentos para criação desse &lt;em&gt;BOT&lt;/em&gt;, recomendo que pesquise nesse &lt;a class=&#34;link&#34; href=&#34;https://telegram.org/faq#q-how-do-i-create-a-bot&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;link, na pagina do Telegram&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Em nossos testes eu criei meu &lt;em&gt;BOT&lt;/em&gt; e vou utiliza-lo para fazer as notificações para uma sala de teste, no intuito de inserir meu &lt;em&gt;BOT&lt;/em&gt; para visualizar as notificações.&lt;/p&gt;&#xA;&lt;p&gt;   Seguindo com nossas configurações, irei utilizar o mesmo exemplo que já estamos trabalhando, porém vou agregar mais um arquivo no projeto, denominado como telegram.yaml&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;  - name: Send test message&#xA;    telegram:&#xA;        token: bot000:xxxx&#xA;        chat_id: -yyyy&#xA;        msg: Ansible playbook executed&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Como podem observar eu omiti algumas informações de nosso exemplo devido a ser referenciado ao meu &lt;strong&gt;token e ID de BOT&lt;/strong&gt;, portanto a partir de seu &lt;em&gt;BOT&lt;/em&gt; essas informações vocês devem alterar olhando especificamente em seu &lt;em&gt;BOT&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Um dos motivos mais difíceis para conseguir funcionar essa notificação através do BOT, foi conseguir adquirir esse chat_id, que com exclusividade vou detalhar um pouco de que forma facilitar sua vida.&lt;/p&gt;&#xA;&lt;p&gt;   Como exemplo o nome do BOT seria rodrigo_bot&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Você deve inserir seu BOT em um grupo&lt;/li&gt;&#xA;&lt;li&gt;Você precisa enviar uma mensagem em seu grupo para seu BOT&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Neste caso você deve fazer &lt;em&gt;&lt;strong&gt;/my_id @rodrigo_bot&lt;/strong&gt;&lt;/em&gt; ( Eu tentei diversas mensagens, mas a única que trouxe a informação foi utilizando &lt;em&gt;/my_id&lt;/em&gt; )&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Em seu browser você deve colocar&lt;em&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://api.telegram.org/botXXX:YYYY/getUpdates&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://api.telegram.org/botXXX:YYYY/getUpdates&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; ( lembre-se de trocar as variáveis citadas pelo token de seu BOT )&lt;/li&gt;&#xA;&lt;li&gt;Após a resposta você deve procurar pelo campo ,&lt;em&gt;&lt;strong&gt;“chat”:{“id”:-xxxxxx&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;BINGO!!!!&lt;/strong&gt;  😆&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;   Enfim, agora você pode utilizar as informações para preencher em seu arquivo do Ansible ( telegram.yaml ). Se quiser fazer um teste antes para validar sobre o chat-id o telegram aceita notificação via CURL. Esse comando é aceito no Linux ( &lt;em&gt;&lt;strong&gt;curl -X POST “https://api.telegram.org/botxxx:yyyyy/sendMessage” -d “chat_id=-wwwww&amp;amp;text=my sample text”&lt;/strong&gt;&lt;/em&gt; ), lembrando-se que para funcionar você precisa anexar suas informações de token e chat_id.&lt;/p&gt;&#xA;&lt;p&gt;   Para que possamos finalizar eu chamei através de nosso arquivo principal ( backup_router.yaml ) nossa notificação na sala de bate papo.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: Configuration Backup in Cisco Devices&#xA;  hosts: routers&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Define access&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: Obtain commands&#xA;    include: commands_variance.yaml&#xA;&#xA;  - name: Obtain Telegram&#xA;    include: telegram.yaml&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Segue a execução de nossa playbook. Nesse caso chamei duas mensagens para popular mais opções para você.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/09/ansible_telegram_playbook.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Após a execução podemos consultar em nossa sala de bate papo nossa mensagem populada.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/09/notifica%C3%A7%C3%A3o_telegram_ansible.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Espero que tenham gostado e nossa próxima integração será através de outra ferramenta de messaging. Aguardem!!!&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Variações no Playbook – ” Include “</title>
            <link>https://ciscoredes.com.br/2017/08/14/ansible-variacoes-no-playbook-include/</link>
            <pubDate>Mon, 14 Aug 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/08/14/ansible-variacoes-no-playbook-include/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Inventory_hostname.jpg&#34; alt=&#34;Featured image of post Ansible – Variações no Playbook – ” Include “&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Baseando-se em nosso ultimo &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/08/09/ansible-criacao-do-playbook/&#34; &gt;post&lt;/a&gt;, 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.&lt;/p&gt;&#xA;&lt;p&gt;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 ( &lt;strong&gt;inventário&lt;/strong&gt; ) colocando nele a denominação do hostname e nossa variável ” &lt;em&gt;&lt;strong&gt;ansible_host&lt;/strong&gt;&lt;/em&gt; ” obviamente atrelado ao nosso IP de gerenciamento.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[routers]&#xA;R1 ansible_host=192.168.0.19&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Desta forma precisamos fazer uma pequena alteração em nosso playbook adicionando a variável ” &lt;em&gt;&lt;strong&gt;inventory_hostname&lt;/strong&gt;&lt;/em&gt; ” no momento de salvar nosso arquivo ( &lt;strong&gt;.txt&lt;/strong&gt; ). 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.  🙂&lt;/p&gt;&#xA;&lt;p&gt;   Segue abaixo nosso novo arquivo:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: Acesso remoto aos equipamentos&#xA;  hosts: routers&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Define access&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: show running-config&#xA;    ios_command:&#xA;     provider: &amp;#34;{{ provider }}&amp;#34;&#xA;     commands:&#xA;        - show running-config&#xA;    register: config&#xA;&#xA;  - name: save output Running&#xA;    copy:&#xA;      content: &amp;#34;{{ config.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_running.txt&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Com isso, podemos executar nosso playbook como explicado anteriormente, e logo vocês podem observar a diferença de ” &lt;em&gt;output&lt;/em&gt; “, para qual temos o hostname populado ” &lt;strong&gt;R1&lt;/strong&gt; “, bem como o arquivo de texto que foi gerado como ” &lt;strong&gt;R1_running.txt&lt;/strong&gt; “&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Inventory_hostname.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   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: &lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- name: show version&#xA;    ios_command:&#xA;      provider: &amp;#34;{{ provider }}&amp;#34;&#xA;      commands:&#xA;        - show version&#xA;    register: config&#xA;&#xA;  - name: save output Version&#xA;    copy:&#xA;      content: &amp;#34;{{ config.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_version.txt&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Após compilar novamente nossa playbook vocês podem observar que foram executados os dois comandos e consequentemente gerados dois arquivos.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Many_commands.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   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?&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que seja mais interessante criarmos um arquivo ( &lt;em&gt;&lt;strong&gt;yaml&lt;/strong&gt;&lt;/em&gt; ), 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 “&lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/latest/include_module.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt; include&lt;/a&gt; “, conforme segue abaixo em nosso script.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- name: Acesso remoto aos equipamentos&#xA;  hosts: routers&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Define access&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: Obtain commands&#xA;    include: commands_variance.yaml&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   Após essa inserção eu criei um novo documento ( &lt;em&gt;&lt;strong&gt;yaml&lt;/strong&gt;&lt;/em&gt; ), 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.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;  - name: show running-config&#xA;    ios_command:&#xA;     provider: &amp;#34;{{ provider }}&amp;#34;&#xA;     commands:&#xA;        - show running-config&#xA;    register: config&#xA;&#xA;  - name: save output Running&#xA;    copy:&#xA;      content: &amp;#34;{{ config.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_running.txt&amp;#34;&#xA;&#xA;  - name: show version&#xA;    ios_command:&#xA;      provider: &amp;#34;{{ provider }}&amp;#34;&#xA;      commands:&#xA;        - show version&#xA;    register: config&#xA;&#xA;  - name: save output Version&#xA;    copy:&#xA;      content: &amp;#34;{{ config.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/{{ inventory_hostname }}_version.txt&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   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.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Ansible – Criação do Playbook</title>
            <link>https://ciscoredes.com.br/2017/08/09/ansible-criacao-do-playbook/</link>
            <pubDate>Wed, 09 Aug 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/08/09/ansible-criacao-do-playbook/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Playbook_Executed.jpg&#34; alt=&#34;Featured image of post Ansible – Criação do Playbook&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   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 ( &lt;strong&gt;CSR1000V&lt;/strong&gt; ) para capturar sua configuração ( &lt;em&gt;running-config&lt;/em&gt; ) 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:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Ping_CSR1000V.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Após esse processo devemos garantir que nosso roteador é acessível via protocolo &lt;strong&gt;SSH&lt;/strong&gt; ( &lt;em&gt;Secure Shell&lt;/em&gt; ), isso é necessário porque o &lt;strong&gt;Ansible&lt;/strong&gt; utiliza-se somente desse protocolo para acesso aos equipamentos ( &lt;em&gt;Roteadores, Switches, Servidores, etc&lt;/em&gt; ) 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 &lt;a class=&#34;link&#34; href=&#34;https://www.vivaolinux.com.br/dica/Instalando-e-configurando-servidor-SSH-%28Ubuntu%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;procedimento&lt;/a&gt;, mas nesse momento você não precisa se preocupar em habilitar esse serviço nesse sistema operacional.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_SSH_Access.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   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 &lt;strong&gt;numero ( 1 )&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   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 &lt;strong&gt;numero ( 2 )&lt;/strong&gt; que não temos mais nenhuma sessão estabelecida com o equipamento. Se quiser monitorar acesso ao seu roteador habilite o ” &lt;em&gt;debug ip ssh detail&lt;/em&gt; “.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_SSH_Router_Auth.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   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+.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;!&lt;br&gt;&#xA;username rodrigo privilege 15 password 0 rodrigo&lt;br&gt;&#xA;!&lt;br&gt;&#xA;ip domain name cisco.com&lt;br&gt;&#xA;!&lt;br&gt;&#xA;ip ssh time-out 60&lt;br&gt;&#xA;ip ssh source-interface GigabitEthernet3&lt;br&gt;&#xA;ip ssh version 2&lt;br&gt;&#xA;!&lt;br&gt;&#xA;line vty 0 15&lt;br&gt;&#xA;login local&lt;br&gt;&#xA;transport input ssh&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;   Enfim, depois de garantir total acesso ao equipamento, segue abaixo a configuração de nosso playbook para que possamos capturar o ” &lt;em&gt;show running-config&lt;/em&gt; “.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---&#xA;- hosts: routers&#xA;  gather_facts: no&#xA;  connection: local&#xA;&#xA;  tasks:&#xA;  - name: OBTAIN LOGIN CREDENTIALS&#xA;    include_vars: secret.yaml&#xA;&#xA;  - name: Define access&#xA;    set_fact:&#xA;      provider:&#xA;        host: &amp;#34;{{ ansible_host }}&amp;#34;&#xA;        username: &amp;#34;{{ creds[&amp;#39;username&amp;#39;] }}&amp;#34;&#xA;        password: &amp;#34;{{ creds[&amp;#39;password&amp;#39;] }}&amp;#34;&#xA;        auth_pass: &amp;#34;{{ creds[&amp;#39;auth_pass&amp;#39;] }}&amp;#34;&#xA;&#xA;  - name: show running-config&#xA;    ios_command:&#xA;     provider: &amp;#34;{{ provider }}&amp;#34;&#xA;     commands:&#xA;        - show run&#xA;    register: config&#xA;&#xA;  - name: save output to /home/rodrigo/Documents/ansible&#xA;    copy:&#xA;      content: &amp;#34;{{ config.stdout[0] }}&amp;#34;&#xA;      dest: &amp;#34;/home/rodrigo/Documents/ansible/{{ ansible_host }}.txt&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;   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 ( &lt;strong&gt;.txt&lt;/strong&gt; )&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Before_Execute_Playbook.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Após todo esse processo devemos executar nosso playbook através do comando ” &lt;em&gt;ansible-playbook -i hosts backup_cisco_router.yaml&lt;/em&gt; “. Na sequencia podemos observar todos os passos de nosso playbook sendo visualizado através das confirmações de nossas “ &lt;em&gt;tasks&lt;/em&gt; “, e na última ação ” &lt;em&gt;PLAY RECAP&lt;/em&gt; ” 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.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Playbook_Executed.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Com isso podemos visualizar nosso arquivo ” &lt;strong&gt;.txt&lt;/strong&gt; ” com toda a configuração atual de nosso equipamento.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/08/Ansible_Show_Running.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Espero que vocês tenham gostado e no proximo post vou demostrar algumas variações que podemos executar dentro dessa lógica de script.&lt;/p&gt;&#xA;&lt;p&gt;   Aguardo comentários.  🙂&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Cisco DevNet Webinar – Netacad</title>
            <link>https://ciscoredes.com.br/2017/07/20/cisco-devnet-webinar-netacad/</link>
            <pubDate>Thu, 20 Jul 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/07/20/cisco-devnet-webinar-netacad/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/07/DevNet_Webinar_Netacad.jpg&#34; alt=&#34;Featured image of post Cisco DevNet Webinar – Netacad&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/07/DevNet_Webinar_Netacad.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Gostaria de notificar sobre uma nova serie de Webinar que o time Networking Academy está promovendo baseando-se nos novos conceitos que estavamos visualizando sobre “ &lt;em&gt;Progamabilidade&lt;/em&gt; “. Esse movimento também vai muito em conjunto com o projeto que esta tendo muita forças que é o DevNet.&lt;/p&gt;&#xA;&lt;p&gt;   Baseando-se nessa filosofia, neste primeiro evento a ideia é justamente explicar um pouco sobre &lt;strong&gt;DevNet,&lt;/strong&gt; o conceito e ferramentas usadas para SDN. Maiores detalhes podem-se visualizados através do &lt;a class=&#34;link&#34; href=&#34;https://www.netacadadvantage.com/prepare-for-work-blog/-/blogs/cisco-devnet-webinar-series-&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;site.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;   Para efetuar seu cadastro no primeiro Webinar que será na proxima quinta-feira dia 27/07 às 13:00hs ( &lt;strong&gt;Brazil Time&lt;/strong&gt; ), você deve fazer seu cadastro através desse &lt;a class=&#34;link&#34; href=&#34;http://bit.ly/DevNetSession1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;link&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Eu estarei lá. Aguardo vocês.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Validação Sintaxe – Ansible</title>
            <link>https://ciscoredes.com.br/2017/05/15/validacao-sintaxe-ansible/</link>
            <pubDate>Mon, 15 May 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/05/15/validacao-sintaxe-ansible/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Atom_indent_lines.jpg&#34; alt=&#34;Featured image of post Validação Sintaxe – Ansible&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Conforme nossas notificações anteriores, hoje gostaria de trazer algumas facilidades que podem ajudar vocês em relação a validação de ” &lt;em&gt;Syntax&lt;/em&gt; “. O que seria isso?&lt;/p&gt;&#xA;&lt;p&gt;   Toda linguagem de programação, bem como nossa ” &lt;em&gt;&lt;strong&gt;costumeira&lt;/strong&gt;&lt;/em&gt; ” CLI tem sua syntax correta, para que nossos comandos sejam aplicados de forma correta em nossos equipamentos, bem como nesse caso, a lógica seria executar algumas validações em meu script ” &lt;em&gt;Ansible&lt;/em&gt; “, para que ele já possa mostrar onde podem estar contidos os erros.&lt;/p&gt;&#xA;&lt;p&gt;   Com isso, vocês podem perceber que o Atom pode trazer diferentes temas e pacotes para customização de seu editor, onde para nosso caso vou trazer 3 pacotes que irá ajudar em suas validações de script. Vale lembrar que esses pacotes que encontrei, foram os que mais me agradam, portanto se alguém que já trabalha com esse editor para desenvolvimento de scripts e tiver mais algumas dica interessante, posta em nossos comentários para que possamos desenvolver juntos as facilidades.  😛 &lt;/p&gt;&#xA;&lt;p&gt;   Para procurar os pacotes e fazer a instalação, você deve ir em &lt;em&gt;Edit -&amp;gt; Preferences -&amp;gt; + Install&lt;/em&gt;. Logo, você deve visualizar algo conforme nossa figura abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Install_packages_atom.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Após, isso eu recomendo esses três pacotes para que você procure na aba de packages e faça a instalação dos mesmos:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;language-ansible&lt;/li&gt;&#xA;&lt;li&gt;linter-ansible-syntax&lt;/li&gt;&#xA;&lt;li&gt;linter-js-yaml&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;   Após instalação alguns recursos precisam ser configurados, para que de fato eles possam trabalhar a seu favor. Em dois casos a recomendação é que você faça edição de um arquivo do Atom chamado ( &lt;strong&gt;config.cson&lt;/strong&gt; ), para isso segue os links dos 3 pacotes recomendados acima para que você leia e execute conforme recomendação.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://atom.io/packages/language-ansible&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://atom.io/packages/language-ansible&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://atom.io/packages/linter-ansible-syntax&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://atom.io/packages/linter-ansible-syntax&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://atom.io/packages/linter-js-yaml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://atom.io/packages/linter-js-yaml&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;   Com isso após estes passos, podemos observar alguns ítens que são inseridos logo abaixo de nossa aplicação dando dicas de possíveis erros em nosso script:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Error_script_ansible.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Em nossos dois retângulos azuis, podemos visualizar os alertas que nossos pacotes inserem como notificação e o retângulo laranja a descrição da falha, bem como em que linha ela esta ocorrendo. Desta forma, já conseguimos ter alguma visualização de possíveis erros de digitação, estruturação de variáveis, variáveis sem contéudo, etc.&lt;/p&gt;&#xA;&lt;p&gt;   Como uma última dica e que pode ajudar de alguma forma a visualização da sua indentação, onde pode trazer para você vários problemas, como um espaço adicionado ou até um ” &lt;em&gt;TAB&lt;/em&gt; ” executado por engano ( achando que estava na CLI do Cisco…rsrsrs  🙂 ). Para isso devemos novamente ir em &lt;em&gt;&lt;strong&gt;Edit -&amp;gt; Preferences -&amp;gt; Editor&lt;/strong&gt;&lt;/em&gt; ( Scroll on ) e você irá visualizar &lt;em&gt;Show Indent Guide&lt;/em&gt;. Como em nossa figura:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Atom_indent_lines.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Você pode visualizar em nosso retângulo azul à esquerda as linhas nas verticais representando o nível de cada argumento que você esta inserindo em seu código.&lt;/p&gt;&#xA;&lt;p&gt;   Espero que vocês tenham gostado dessas dicas e se alguém tiver mais alguma dica fique a vontade em compartilhar. Em nosso próximo post vou iniciar com algumas configurações para captura em nosso CSRV1000V.&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Automação – Ansible – DevOps</title>
            <link>https://ciscoredes.com.br/2017/05/08/automacao-ansible-devops/</link>
            <pubDate>Mon, 08 May 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/05/08/automacao-ansible-devops/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Ansible_Topology.jpg&#34; alt=&#34;Featured image of post Automação – Ansible – DevOps&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Ansible_logo.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que baseando-se no título, vocês devem estar se perguntando esse &lt;strong&gt;BLOG&lt;/strong&gt; não é de redes? Sim, ele é de redes, porém, como já venho trazendo em alguns posts anteriores e sempre menciono que nossa área de redes está passando por uma transformação é devido a esses ítens que venho hoje falar um pouco mais para vocês.&lt;/p&gt;&#xA;&lt;p&gt;   Devido a essa novo tema, venho aqui, compartilhar um pouco do que estou estudando para que eu possa melhorar em alguns aspectos, e claro gostaria de mostrar para vocês sobre alguns ítens que possam ajudar nossos engenheiros em nossas tarefas diárias.&lt;/p&gt;&#xA;&lt;p&gt;   Hoje, nosso segmento de redes está trazendo muitos conceitos sobre os processos de automações que devemos implementar, para que nossas tarefas diarias sejam mais efetivas e que nossos scripts não sejam somente atrelados a nossa &lt;strong&gt;CLI&lt;/strong&gt; ( &lt;em&gt;command line interface&lt;/em&gt; ) e sim, que nossos scripts possam agregar mais valor as tarefas cotidianas de implementações e que demandam muito esforço repetitivo. Baseando-se nesses tópicos estamos falando-se de duas frentes de trabalho que estão caminhando muito forte dentro do mundo de Redes ( &lt;em&gt;Cisco&lt;/em&gt; ) que são &lt;strong&gt;Python&lt;/strong&gt; e &lt;strong&gt;Ansible&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;   Talvez, algumas pessoas podem estar pensando, porque ele já vai falar de Ansible se os temas de Python ainda não forão discutidos ou exemplificados em nosso BLOG. Isso eu vou explicar mais no final de nossa serie de posts sobre Ansible. &lt;/p&gt;&#xA;&lt;p&gt;   Como mencionado anteriormente, nos estamos falando muito em automação dos processos para que seja executado de forma rapida e automatica diversas configurações ou validações em nossos ambientes de redes. Devido a isso, a Cisco está trabalhando fortemente nas disponibilizações de &lt;strong&gt;API&lt;/strong&gt; ( para que não viu, verifique em nosso post de &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/02/13/o-que-e-api-e-rest-api/&#34; &gt;Rest API / API&lt;/a&gt; ) e também em formas de trabalhar em conjunto para que essas metodologias de DevOps, seja cada vez mais vivenciado nesse mundo Cisco. Com isso, o que trago para vocês é um detalhamento sobre a linguagem &lt;strong&gt;Ansible&lt;/strong&gt;. &lt;/p&gt;&#xA;&lt;p&gt;   Basicamente, essa linguagem é desenvolvida pela &lt;a class=&#34;link&#34; href=&#34;https://www.redhat.com/pt-br/technologies/management/ansible&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Red Hat&lt;/a&gt;, onde eles estão investindo pesado para divulgação dessa linguagem e disponibilizações de soluções para diferentes vendors. Com isso, gostaria de mostrar a &lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;documentação do Ansible&lt;/a&gt;, para que vocês possam consultar e com certeza através dela muitos ítens podem ser validados, para que você pense em seu primeiro script. Como uma primeira dica, gostaria de deixar um ítem extremamente voltado para nossa &lt;a class=&#34;link&#34; href=&#34;http://docs.ansible.com/ansible/list_of_network_modules.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;área de Redes&lt;/a&gt;, especificamente para as demandas que podemos utilizar para equipamentos Cisco, mas também podem observar que temos para diversos fabricantes.&lt;/p&gt;&#xA;&lt;p&gt;   Para efetuar nossos testes eu vou trabalhar com o sistema operacional &lt;strong&gt;Linux&lt;/strong&gt; ( &lt;em&gt;escolhido foi o Ubuntu&lt;/em&gt; ) e para maior praticidade, vou utilizar um router virtualizado &lt;strong&gt;Cisco CSR1000V&lt;/strong&gt;. Segue uma topologia bem simples para que vocês entendam o cenario de teste, porém lembrando que esse ambiente pode ser escalado a níveis muito maiores.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/05/Ansible_Topology.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Em nosso próximo post, vou explicar um pouco mais sobre a instalação da biblioteca Ansible no Ubuntu e de alguns recursos que vocês podem utilizar para melhorar seu aprendizado.  🙂 &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Cisco – SandBox</title>
            <link>https://ciscoredes.com.br/2017/03/17/cisco-sandbox/</link>
            <pubDate>Fri, 17 Mar 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/03/17/cisco-sandbox/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/03/SandBox-Message.jpg&#34; alt=&#34;Featured image of post Cisco – SandBox&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/03/SandBox-Message.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Conforme havia comentado anteriormente em nosso post sobre &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/02/16/api-devnet/&#34; &gt;DevNet&lt;/a&gt;, hoje gostaria de trazer para vocês mais alguns ítens que estão totalmente relacionados a esses novos desenvolvimentos, bem como laboratórios &lt;strong&gt;free&lt;/strong&gt; para que você possa praticar alguns conceitos.&lt;/p&gt;&#xA;&lt;p&gt;   A plataforma &lt;a class=&#34;link&#34; href=&#34;https://developer.cisco.com/site/devnet/sandbox/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Sandbox&lt;/a&gt; está disponivel para que você possa usar para desenvolvimento, testar APIs, aprender como configurar um produto, treinamento, hackathons, etc. Dentro desse perfil existe dois módulos que são chamados de ” &lt;em&gt;&lt;strong&gt;Always-On&lt;/strong&gt;&lt;/em&gt; ” e ” &lt;em&gt;&lt;strong&gt;Reservation&lt;/strong&gt;&lt;/em&gt; “, onde cada um teria sua particularidade:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Always on&lt;/strong&gt; = Acesso instantâneo sem necessidade de qualquer reserva, acesso completo para as APIs, porém como o acesso é compartilhado com todos os usuários, alguns níveis de privilégios são bloqueados.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reservation&lt;/strong&gt; = Necessidade de reservar ambiente, acesso administrativo, ambiente privado, porém existe as policitas que necessita de uma conexão via VPN e as configurações executadas depois de finalizar sua reserva não serão gravadas.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;   Com isso, você pode testar seu código ou até mesmo visualizar de que forma as novas plataformas estão trabalhando, praticando em alguns casos exemplos de configuração. Neste modelo já existem laboratórios para diversas torres de tecnologia, como abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/03/Portifolio_Sandbox.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Agora as ferramentas já temos disponíveis, apenas precisamos entender esses novos conceitos para praticar e vivenciar um pouco dessa nova experiencia.  🙂&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>API – DevNet</title>
            <link>https://ciscoredes.com.br/2017/02/16/api-devnet/</link>
            <pubDate>Thu, 16 Feb 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/02/16/api-devnet/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/02/Cisco-DevNet.jpg&#34; alt=&#34;Featured image of post API – DevNet&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/02/Cisco-DevNet.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que você tenha lido nosso post anterior sobre &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/2017/02/13/o-que-e-api-e-rest-api/&#34; &gt;API&lt;/a&gt; e conforme informado vou trazer alguns ítens que venho acompanhando nessa área que estamos trabalhando ( &lt;em&gt;Routing &amp;amp; Switching e DC&lt;/em&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Como venho falando em alguns posts anteriores nossa área está alterando-se e devido a isso muitas movimentações estão acontecendo nas organizações para se adequar as novas tendências bem como re-estruturar seus produtos para que os concorrentes não atropelem e definitivamente as marcas não caiam no desuso.&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que vocês souberam da última aquisição da Cisco de uma empresa chamada “ &lt;a class=&#34;link&#34; href=&#34;https://www.appdynamics.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;em&gt;APPDynamics&lt;/em&gt;&lt;/a&gt; “, pois bem, se observarmos é mais uma empresa tendo seu core business para aplicações. Além disso, podemos observar as ultimas aquisições da Cisco pelo link ( &lt;a class=&#34;link&#34; href=&#34;http://www.cisco.com/c/en/us/about/corporate-strategy-office/acquisitions/acquisitions-list-years.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Cisco Acquisition&lt;/strong&gt;&lt;/a&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;   Olhando neste cenário de aquisições da Cisco, qual é a maioria do core business dessas empresas compradas pela Cisco? Se você pensou empresas de software, está correto. &lt;/p&gt;&#xA;&lt;p&gt;   Devido essas novas demandas que estão surgindo exponencialmente, ela como uma gigante não pode ficar esperando ( &lt;em&gt;porém eu achei que ela demorou para acreditar nisso&lt;/em&gt; ) que outros fabricantes roubem muito seu mercado, desta forma hoje eles já tem times especificos e uma grande comunidade que está desenvolvendo para que os equipamentos, com sua APIs sejam utilizadas por qualquer desenvolvedor ou fabricante.&lt;/p&gt;&#xA;&lt;p&gt;   Como podem observar pela foto acima Cisco esta trazendo essa menção chamada &lt;strong&gt;DevNet&lt;/strong&gt;, onde já temos o site &lt;a class=&#34;link&#34; href=&#34;https://developer.cisco.com/site/devnet/home/index.gsp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Developers Cisco&lt;/a&gt;, que traz diversas informações relacionados aos desenvolvimento de cada plataforma. Para cada plataforma nós já podemos consultar as &lt;em&gt;&lt;strong&gt;APIs publicas&lt;/strong&gt;&lt;/em&gt; baseando-se em cada torre de tecnologia ( &lt;em&gt;Cloud, Networking, Datacenter, etc&lt;/em&gt; ).&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/02/DevNet-Portal.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;   Se vocês navegarem pelo site, podemos mencionar ainda que não temos muitos ítens disponibilizados para executar as tarefas, mas com certeza eu acredito que isso vai crescer exponencialmente. Vocês acham que isso pode crescer?&lt;/p&gt;&#xA;&lt;p&gt;   Em nosso proximo post vou mencionar um pouco mais sobre o &lt;strong&gt;SandBox&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>O que é API e Rest API?</title>
            <link>https://ciscoredes.com.br/2017/02/13/o-que-e-api-e-rest-api/</link>
            <pubDate>Mon, 13 Feb 2017 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2017/02/13/o-que-e-api-e-rest-api/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/01/API-General.jpg&#34; alt=&#34;Featured image of post O que é API e Rest API?&#34; /&gt;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2017/01/API-General.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;   Devido as novas demandas que estão surgindo, principalmente a relação de integração de software com nossa infraestrutura ( routers, switches, firewalls ) esses termos mencionados em nosso título acabam sendo evidenciados.&lt;/p&gt;&#xA;&lt;p&gt;   Acredito que todos quando observam esses termos imaginam que isso seja algo relacionado a quem trabalha com programação, integração de sistemas, desenvolvedores de sistemas, etc. &lt;/p&gt;&#xA;&lt;p&gt;   Pois bem, isso não é mais a realidade que vivenciamos em nossa área de redes e infraestrutura. Porquê?  💡 &lt;/p&gt;&#xA;&lt;p&gt;   Como todos nos sabemos nossa área esta passando por várias transformações, bem como as empresas estão adicionando em seus produtos muitas funcionalidades que podem ser visualizadas / consultadas por outros fabricantes, com o intuito de oferecer serviços e integrações entre as plataformas. Com isso podemos definir dois ítens:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;API&lt;/strong&gt; ( &lt;strong&gt;Application Programming Interface&lt;/strong&gt; ) : Isso está relacionado a ferramenta ou biblioteca que pode ajudar aos desenvolvedores acessarem informações dentro de seu código ( &lt;em&gt;fabricante&lt;/em&gt; ) para fazer a tratativa das informações necessária para o desenvolvimento de sua ferramenta. Essas APIs podem estar contidas nos sistemas operacionais, sistema de banco de dados, hardware de computadores, etc. No caso de uma API podemos mencionar que pensando no protocolo HTTP você poderia fazer um ” &lt;em&gt;GET&lt;/em&gt; ” no código para obter as informações.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;   Como exemplo de uma &lt;strong&gt;API&lt;/strong&gt; poderíamos citar dois exemplos:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Quando acessamos um site onde vamos pesquisar seu endereço e nele temos o mapa do ” &lt;em&gt;Google MAPS&lt;/em&gt; ” populados automaticamente na página daquele cliente, e da mesma forma podemos navegar nessa janela olhando pelas ruas próximas ao mapa, ou seja, o site está acessando uma API publica do Google para mostrar aquela informação.&lt;/li&gt;&#xA;&lt;li&gt;Poderíamos citar sobre o &lt;em&gt;Facebook&lt;/em&gt; que disponibiliza uma API para que por exemplo outros software possam fazer uma publicação automatica baseado na sua autorização de utilização da API ( &lt;em&gt;Keys&lt;/em&gt; ).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;Rest API&lt;/strong&gt; ( &lt;strong&gt;Representational state transfer API&lt;/strong&gt; ) : Como informado acima &lt;strong&gt;API&lt;/strong&gt; oferece caminhos para que você possa acessar as informações, e quando a menção se torna uma &lt;strong&gt;REST API&lt;/strong&gt; seria quando eu defino funções a qual os desenvolvedores podem executar solicitações e receber respostas por exemplo através do protocolo HTTP ( &lt;em&gt;GET&lt;/em&gt; e &lt;em&gt;POST&lt;/em&gt; )&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;   Com isso diversas plataforma agora estão vindo com &lt;strong&gt;API públicas&lt;/strong&gt; para que você possa consultar e de alguma forma possa interagir com as ferramentas / hardware que esse fabricante disponibiliza. Você poderia estar pensando o que vou fazer com essas funcionalidades?&lt;/p&gt;&#xA;&lt;p&gt;   Em nosso segundo post vou mencionar sobre o que fazer com essas funcionalidades e como a Cisco está trabalhando com essas novas demandas. &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Protocolo VTP – parte 2</title>
            <link>https://ciscoredes.com.br/2013/03/11/protocolo-vtp-parte-2/</link>
            <pubDate>Mon, 11 Mar 2013 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2013/03/11/protocolo-vtp-parte-2/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2013/01/VTP_packet.png&#34; alt=&#34;Featured image of post Protocolo VTP – parte 2&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;  Conforme mencionado anteriormente em nosso &lt;a class=&#34;link&#34; href=&#34;https://ciscoredes.com.br/protocolo-vtp-parte-1/&#34;  title=&#34;Protocolo VTP – parte 1&#34;&#xA;    &gt;post&lt;/a&gt;, vamos tratar de explicar como funciona os anúncios de VTP.&lt;/p&gt;&#xA;&lt;p&gt; Nos sabemos que o equipamento designado como servidor irá publicar as informações para todos os seus vizinhos que estão associados ao mesmo domínio, bem como os outros modos também irão popular as informações e repassar a mensagem para seus vizinhos, fazendo com que todos possam obter a mesma informação.&lt;/p&gt;&#xA;&lt;p&gt; Essa informação de comparar as alterações está atrelada especificamente ao número de revisão que cada switch possui, ou seja, os switches que estão no mesmo domínio com uma revisão menor irá ser atualizado caso a revisão que esta sendo enviada tenha um valor maior. Nós iremos visualizar as informações através do comando abaixo:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;Router#&lt;strong&gt;show vtp status&lt;/strong&gt;&lt;br&gt;&#xA;VTP Version: 2&lt;br&gt;&#xA;&lt;strong&gt;Configuration Revision: 247&lt;/strong&gt;&lt;br&gt;&#xA;Maximum VLANs supported locally: 1005&lt;br&gt;&#xA;&lt;strong&gt;Number of existing VLANs: 33&lt;/strong&gt;&lt;br&gt;&#xA;&lt;strong&gt;VTP Operating Mode: Client&lt;/strong&gt;&lt;br&gt;&#xA;&lt;strong&gt;VTP Domain Name: CiscoRedes&lt;/strong&gt;&lt;br&gt;&#xA;VTP Pruning Mode: Enabled&lt;br&gt;&#xA;VTP V2 Mode: Disabled&lt;br&gt;&#xA;VTP Traps Generation: Disabled&lt;br&gt;&#xA;MD5 digest: 0x45 0x52 0xB6 0xFD 0x63 0xC8 0x49 0x80&lt;br&gt;&#xA;Configuration last modified by 0.0.0.0 at 8-12-99 15:04:49&lt;br&gt;&#xA;Router#&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Acima podemos observar diversas informações, como o número de revisão que vai mencionar se todos os switches estão com  seu database sincronizado, quantidade de VLANs populadas nesse switch, dominio que pertence esse equipamento e qual o modo de operação que ele esta trabalhando ( cliente ).&lt;/p&gt;&#xA;&lt;p&gt;  Essas mensagens são divulgadas através do link trunk habilitado entre os switches, fazendo com que essas informações sejam propagadas através do 802.1q. Veja abaixo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2013/01/VTP_packet.png&#34; alt=&#34;VTP_packet&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;  Nos temos 3 métodos na qual esses anúncios são enviados:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sumarizado =&lt;/strong&gt; São enviados a cada 5 minutos pelo servidor VTP, informa aos switches habilitados para VTP sobre o número de revisão de configuração de VTP atual e são enviados imediatamente após a alteração de qualquer configuração;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sub-Conjunto =&lt;/strong&gt; Contém as informações de VLANs e as alterações que vão disparar o anúncio de subconjunto são:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Criação ou exclusão de uma VLAN&lt;/li&gt;&#xA;&lt;li&gt;Suspensão ou ativação de uma VLAN&lt;/li&gt;&#xA;&lt;li&gt;Alteração no nome da VLAN&lt;/li&gt;&#xA;&lt;li&gt;Alteração no MTU da VLAN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Solicitação =&lt;/strong&gt; É enviado a um servidor VTP no mesmo domínio VTP, o servidor VTP responde enviando um anúncio de sumarização e, em seguida, um anúncio de subconjunto.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;O nome de domínio foi alterado&lt;/li&gt;&#xA;&lt;li&gt;O switch recebe um anúncio de sumarização com um número de revisão de configuração mais alto do que seu próprio número&lt;/li&gt;&#xA;&lt;li&gt;Uma mensagem de anúncio de subconjunto é perdido por alguma razão&lt;/li&gt;&#xA;&lt;li&gt;O switch foi reiniciado&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;  Para que possamos definir em que modo de operação ( servidor, cliente, transparente ) o switch vai trabalhar precisamos definir através:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;CiscoRedes(config)#&lt;strong&gt;vtp mode&lt;/strong&gt; [server, client, transparent ]&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Desta forma podemos concluir sobre o processo de VTP, bem como a divulgação desse protocolo e os modos de configuração que ele pode trabalhar. Lembrando-se que esse protocolo em certas circunstâncias tem um grande valor, porém também é um ponto de falha se formos pensar em segurança, mas vale lembrar que tudo bem planejado pode trazer benefícios e dinamismo para nosso trabalho. &lt;/p&gt;&#xA;&lt;p&gt;  Espero que tenham gostado de mais um tutorial.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fonte:&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a class=&#34;link&#34; href=&#34;http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080890613.shtml&#34;  title=&#34;VTP Cisco&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;VTP Cisco&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Protocolo VTP – parte 1</title>
            <link>https://ciscoredes.com.br/2012/12/26/protocolo-vtp-parte-1/</link>
            <pubDate>Wed, 26 Dec 2012 00:00:00 +0000</pubDate>
            <guid>https://ciscoredes.com.br/2012/12/26/protocolo-vtp-parte-1/</guid>
            <description>&lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2012/12/VTP_1.png&#34; alt=&#34;Featured image of post Protocolo VTP – parte 1&#34; /&gt;&lt;p&gt;Olá Pessoal,&lt;/p&gt;&#xA;&lt;p&gt;  Hoje iremos falar de um protocolo utilizado em ambientes de rede local, para qual as informações do database de VLAN são transmitidos para todos os equipamentos pertencentes aquela LAN.&lt;/p&gt;&#xA;&lt;p&gt;  O protocolo VTP ( &lt;strong&gt;Virtual Trunk Protocol&lt;/strong&gt; ) é um protocolo da camada 2 utilizado para manter a configuração de VLANs consistentes em uma rede. O VTP é responsável por gerenciar as VLANs, criando, apagando e renomeando as VLANS existentes na rede.&lt;/p&gt;&#xA;&lt;p&gt;  Em uma rede de switches &lt;strong&gt;sem o protocolo VTP&lt;/strong&gt; o administrador de redes deverá manualmente fazer a criação de VLANs em cada um dos switches da rede. O que, dependendo do número de equipamentos e VLANs, pode se tornar uma atividade muito trabalhosa. Além do mais, com uma grande quantidade de configurações necessárias fica mais suscetível o aparecimento de erros na configuração ou erro humano na hora de inserir essas configurações nos equipamentos.&lt;/p&gt;&#xA;&lt;p&gt;  Já &lt;strong&gt;com o VTP&lt;/strong&gt; esse trabalho é reduzido considerávelmente, pois o administrador entrará com as informações em um único swtich, no VTP Server, que terá a função de distribuir e sincronizar essas informações para os outros switches da rede. Além da redução do trabalho esse método evita erros de configuração, uma vez que toda a parte da configuração de criação das VLANs pode ser realizada apenas no switch VTP Server.&lt;/p&gt;&#xA;&lt;p&gt;  Os switches podem trabalhar em 03 modos dentro do VTP, são eles:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;VTP Server:&lt;/strong&gt;&lt;br&gt;&#xA;Um VTP server pode criar, deletar e renomear VLANs. Ele também anuncia o nome do domínio VTP, a configuração de VLAN e o número de revisão da configuração para todos os outros switches dentro do domínio VTP.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;VTP Client:&lt;/strong&gt;&lt;br&gt;&#xA;Um switch nesse modo não pode criar, nem deletar e nem renomear as VLANs. Dessa forma toda a alteração deve ser feita no VTP server.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;VTP Transparent:&lt;/strong&gt;&lt;br&gt;&#xA;Nesse modo o switch precisa ter as suas VLANs configuradas manualmente. Um switch VTP Transparent não participa do VTP e nem anuncia para os vizinhos suas configurações de VLANs.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Esse protocolo tem duas versões, a qual pode gerar incompatibilidade no meio em que os switches estão configurados. Hoje todos os switches vêm com o &lt;strong&gt;versão 1&lt;/strong&gt; por padrão, sendo assim se desejamos trabalhar com a &lt;strong&gt;versão 2&lt;/strong&gt; temos que habilitar manualmente, lembrando-se que switches mais antigos não suportam a versão 2, portanto terá que manter a versão 1 funcionando. Para configurar a versão seria:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;CiscoRedes#configure terminal&lt;br&gt;&#xA;CiscoRedes(config)#&lt;strong&gt;vtp version&lt;/strong&gt; [1 ou 2]&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Um outro ponto que deve ser sempre verificado é a senha que pode ser configurada separadamente em cada switch, pois esse parâmetro não é enviado pelos anúncios de VTP, ou seja, se a senha estiver incorreta o seu switch não irá popular as informações do database de VLANs. Para configurar a senha seria:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;CiscoRedes#configure terminal&lt;br&gt;&#xA;CiscoRedes(config)#&lt;strong&gt;vtp password&lt;/strong&gt; [senha]&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Chegando em mais um ponto primordial da configuração do VTP, a qual esta relacionado com o domínio para qual esse anúncios serão notificados, ou seja, para que seu switch armazene as informações ele tem que estar no mesmo domínio, senão você pode perder informações importantes nos anúncios. Para configurar o domínio seria:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;CiscoRedes#configure terminal&lt;br&gt;&#xA;CiscoRedes(config)#&lt;strong&gt;vtp domain&lt;/strong&gt; [domain-name]&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;  Para exemplificar nosso conteúdo segue uma topologia:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&#xA;    &lt;img src=&#34;https://ciscoredes.com.br/wp-content/uploads/2012/12/VTP_1.png&#34; alt=&#34;VTP_1&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Nesta topologia vamos trabalhar dando exemplos de como será feita a configuração dos equipamentos, bem como entender o que os switches irão armazenar em seu database. Para quem tiver interesse temos um curso básico sobre VTP nesse site da Cisco ( &lt;a class=&#34;link&#34; href=&#34;http://www.cisco.com/warp/public/473/vtp_flash/&#34;  title=&#34;VTP&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;http://www.cisco.com/warp/public/473/vtp_flash/&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;  Espero que vocês tenham gostado e no próximo post iremos explicar sobre os anúncios de VTP. &lt;/p&gt;&#xA;&lt;p&gt;Abs,&lt;br&gt;&#xA;Rodrigo&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
