{"id":695,"date":"2014-03-05T03:41:02","date_gmt":"2014-03-05T06:41:02","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=695"},"modified":"2014-03-05T03:41:02","modified_gmt":"2014-03-05T06:41:02","slug":"ansible-automatizando-o-data-center","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=695","title":{"rendered":"Ansible &#8211; Automatizando o Data Center"},"content":{"rendered":"<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n<tbody>\n<tr>\n<td colspan=\"2\"><b>Introdu\u00e7\u00e3o<\/b><\/p>\n<div><em>Ansible<\/em>\u00a0\u00e9 uma solu\u00e7\u00e3o para gerenciar os complexos ambientes de hoje em dia &#8211; Clouds, ambientes virtualizados, um crescente n\u00famero de servidores e a sempre demanda por mais.<\/p>\n<p>\u00c9 um modo seguro, consistente e confi\u00e1vel de gerenciar seu ambiente, sem os problemas de outras ferramentas que adicionam mais complexidade ainda, a um problema que j\u00e1 est\u00e1 complicado.<\/p>\n<p>Site oficial:\u00a0<a href=\"http:\/\/www.ansibleworks.com\/\">Ansible \u00ab Simple IT Automation<\/a><\/p>\n<p>Foi projetado para ser pequeno, consistente, seguro e altamente confi\u00e1vel, com uma curva de aprendizado extremamente baixa para suporte, desenvolvedores e gerentes de TI. As configura\u00e7\u00f5es do Ansible s\u00e3o simples descri\u00e7\u00f5es de sua infraestrutura em texto, facilmente compreens\u00edveis e simples de modificar.<\/p>\n<p>O Ansible n\u00e3o precisa, nada mais que uma senha ou chave SSH para come\u00e7ar e n\u00e3o precisa que seja instalado nenhum agente, interferindo o m\u00ednimo poss\u00edvel em seu ambiente atual. \u00c9 uma solu\u00e7\u00e3o super simples, que evita o problema de gerenciar o gerenciamento. N\u00e3o existe a preocupa\u00e7\u00e3o se os agentes est\u00e3o ativos, se precisa atualiz\u00e1-los, fazer a seguran\u00e7a deles, etc.<\/p>\n<p>Ansible implementa um modelo de idempot\u00eancia, onde voc\u00ea apenas descreve o estado desejado do sistema ou servi\u00e7o, n\u00e3o as tarefas para chegar a aquele estado. Assim, n\u00e3o importa em qual estado o sistema esteja, o Ansible sabe como fazer as mudan\u00e7as at\u00e9 chegar ao estado desejado. Isso permite aplica\u00e7\u00e3o de configura\u00e7\u00f5es confi\u00e1veis e repet\u00edveis, evitando os problemas de scripts que quebram e executam a\u00e7\u00f5es irrevers\u00edveis.<\/p>\n<p>Baseado no mais seguro sistema de gerenciamento remoto existente, o OpenSSH. Dispon\u00edvel praticamente em todas as plataformas, \u00e9 muito leve e problemas de seguran\u00e7a s\u00e3o rapidamente resolvidos.<\/p>\n<p>Como previamente falado, Ansible n\u00e3o precisa de agentes remotos. Ele funciona enviando os m\u00f3dulos e executando as tarefas necess\u00e1rias para chegar \u00e0s configura\u00e7\u00f5es desejadas.<\/p>\n<p>Esses m\u00f3dulos s\u00e3o executados com credenciais fornecidas pelo usu\u00e1rio, incluindo suporte ao\u00a0<span>sudo<\/span>\u00a0e Kerberos, e n\u00e3o deixam seus rastros no servidor, depois de executar (qualquer arquivo tempor\u00e1rio, \u00e9 limpo ap\u00f3s a execu\u00e7\u00e3o).<\/p>\n<p>Ele n\u00e3o precisa de acesso\u00a0<span>root<\/span>, chaves SSH ou usu\u00e1rios dedicados e respeita o modelo de seguran\u00e7a do sistema. Ele n\u00e3o exige que o sistema funcione ou esteja configurado de um determinado modo. Assim, o Ansible \u00e9 muito f\u00e1cil de instalar\/configurar e muito seguro.\u00a0<!--more--><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>Instala\u00e7\u00e3o \/ Configura\u00e7\u00e3o inicial<\/b><\/p>\n<div>\n<h1>Instala\u00e7\u00e3o<\/h1>\n<p>Conven\u00e7\u00f5es: para simplificar, chamaremos a m\u00e1quina que gerencia as outras de\u00a0<span>Master<\/span>\u00a0e as m\u00e1quinas gerenciadas, de\u00a0<span>Slaves<\/span>. Para esse tutorial, usaremos o\u00a0<em>Ubuntu 12.04 LTS<\/em>.<\/p>\n<p>Como foi falado anteriormente, o setup do Ansible \u00e9 muito simples. Ele pede um m\u00ednimo de pacotes no\u00a0<span>Master<\/span>, todos plenamente dispon\u00edveis nos reposit\u00f3rios da pr\u00f3pria distro.<\/p>\n<p>Assim, o setup do tutorial comp\u00f5e-se de: duas VMs Ubuntu 12.04: uma\u00a0<span>Master<\/span>\u00a0e outra\u00a0<span>Slave<\/span>. Mas, nada impede de voc\u00ea usar seu Desktop como\u00a0<span>Master<\/span>\u00a0e apenas uma VM como\u00a0<span>Slave<\/span>.<\/p>\n<p>Pr\u00e9-requisitos gerais:<\/p>\n<ul>\n<li>Master e Slave conseguem conectar uma \u00e0 outra via:\u00a0<span>ssh operador@&lt;ip&gt;<\/span><\/li>\n<li>Master e Slave podem instalar normalmente pacotes via\u00a0<span>apt-get<\/span>.<\/li>\n<li>O usu\u00e1rio padr\u00e3o na Master e Slave \u00e9\u00a0<span>operador<\/span>. E ele pode tem permiss\u00e3o de\u00a0<span>sudo su &#8211;<\/span>.<\/li>\n<\/ul>\n<p>Configura\u00e7\u00e3o do\u00a0<span>Master<\/span>:<\/p>\n<p>Logue no\u00a0<span>Master<\/span>, com o usu\u00e1rio\u00a0<span>operador<\/span>. Instale os seguintes pacotes:<\/p>\n<p><strong>$ sudo apt-get install python-paramiko python-yaml python-jinja2 sshpass git<\/strong><\/p>\n<p>Instala\u00e7\u00e3o do Ansible:<\/p>\n<p>Crie um diret\u00f3rio que conter\u00e1, tanto o Ansible, quando a infraestrutura de gerenciamento:<\/p>\n<p><strong>$ mkdir ~\/manager<br \/>\n$ mkdir -p ~\/manager\/{hosts,books}<\/strong><\/p>\n<p>Agora, instale o Ansible:<\/p>\n<p><strong>$ cd ~\/manager<br \/>\n$ git clone https:\/\/github.com\/ansible\/ansible.git<\/strong><\/p>\n<p>Aguarde o download do Ansible via Git.<\/p>\n<h1>Configura\u00e7\u00e3o inicial<\/h1>\n<p>Nesse momento, o Ansible est\u00e1 instalado em\u00a0<span>~\/manager\/ansible<\/span>. Para ativ\u00e1-lo, execute:<\/p>\n<p><strong>$ source ~\/manager\/ansible\/hacking\/env-setup<\/strong><\/p>\n<p>Digitando\u00a0<span>ansible<\/span>, sem par\u00e2metros, j\u00e1 deveria trazer o Help dele. \u00c9 recomend\u00e1vel colocar em seu\u00a0<span>~\/.bashrc<\/span>, para facilitar, o comando:<\/p>\n<div>source ~\/manager\/ansible\/hacking\/env-setup<\/div>\n<p>O pr\u00f3ximo passo, \u00e9 a cria\u00e7\u00e3o de um arquivo de hosts. Esse arquivo lista os seus servidores e os par\u00e2metros de acesso. Ent\u00e3o, crie o arquivo usando o editor de textos de sua prefer\u00eancia, como no exemplo abaixo:<\/p>\n<p><strong>$ vim ~\/manager\/hosts\/ansible_hosts<\/strong><\/p>\n<p>Como exemplo, criaremos um grupo chamado\u00a0<span>AppServers<\/span>\u00a0com apenas a\u00a0<span>Slave<\/span>\u00a0de testes. O conte\u00fado do arquivo est\u00e1 listado abaixo (substitua de acordo com seu ambiente). No exemplo abaixo, temos uma VM VirtualBox rodando na mesma m\u00e1quina, com a porta SSH\/22 &#8220;nateada&#8221; para 51222.<\/p>\n<div>[AppServers]<br \/>\n127.0.0.1 ansible_ssh_port=51222 ansible_ssh_user=operador ansible_ssh_pass=opersenha01<\/div>\n<p>O pr\u00f3ximo passo, \u00e9 exportar a vari\u00e1vel\u00a0<span>ANSIBLE_HOSTS<\/span>. Ela aponta para o o arquivo\u00a0<span>ansible_hosts<\/span>\u00a0que cont\u00e9m os\u00a0<span>Slaves<\/span>\u00a0que voc\u00ea quer administrar.<\/p>\n<p>Em nosso caso, exportaremos assim:<\/p>\n<p><strong>$ export ANSIBLE_HOSTS=~\/manager\/hosts\/ansible_hosts<\/strong><\/p>\n<p>Obs.: recomendo colocar a linha acima tamb\u00e9m em seu\u00a0<span>.bashrc<\/span>.<\/p>\n<p>Para testar a configura\u00e7\u00e3o:<\/p>\n<p><strong>$ ansible all -m ping<\/strong><\/p>\n<p>Deveria responder algo assim:<\/p>\n<blockquote><p>$ ansible all -m ping<br \/>\n127.0.0.1 | success &gt;&gt; {<br \/>\n&#8220;changed&#8221;: false,<br \/>\n&#8220;ping&#8221;: &#8220;pong&#8221;<br \/>\n}<\/p><\/blockquote>\n<p>Se der erro, revise o seguintes passos:<\/p>\n<p>1. Usu\u00e1rio\/senha do arquivo\u00a0<span>ansible_hosts<\/span>.<br \/>\n2. Pode ser necess\u00e1rio instalar o pacote\u00a0<span>python-simplejson<\/span>\u00a0na m\u00e1quina\u00a0<span>Slave<\/span>:<\/p>\n<p><strong># apt-get install python-simplejson<\/strong><\/p>\n<p>Outros exemplos, usando m\u00f3dulos:<\/p>\n<p><strong>$ ansible all -m shell -a &#8216;touch ~\/teste.txt&#8217;<br \/>\n$ ansible all -m shell -a &#8216;date&#8217;<br \/>\n$ ansible all -m file -a &#8216;path=~\/teste.txt owner=operador group=operador mode=0664&#8217;<\/strong><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>M\u00f3dulo \/ Playbooks<\/b><\/p>\n<div>\n<h1>M\u00f3dulo<\/h1>\n<p>Os m\u00f3dulos s\u00e3o os blocos de constru\u00e7\u00e3o dos Playbooks.<\/p>\n<p>Existem m\u00f3dulos para, praticamente, qualquer tarefa e eles est\u00e3o evoluindo rapidamente.<\/p>\n<p>Aqui, h\u00e1 uma refer\u00eancia online deles:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.ansibleworks.com\/docs\/modules.html\">About Modules \u2014 Ansible Documentation<\/a><\/li>\n<\/ul>\n<h1>Playbooks<\/h1>\n<p>S\u00e3o a base do gerenciamento de configura\u00e7\u00e3o e deployment de m\u00faltiplas m\u00e1quinas.<\/p>\n<p><em>Playbooks<\/em>\u00a0cont\u00e9m declara\u00e7\u00f5es, mas tamb\u00e9m, podem orquestrar passos de deploy de aplicativos, podem ativar\/desativar servi\u00e7os e garantir que a configura\u00e7\u00e3o de um servidor est\u00e1 de um modo espec\u00edfico.<\/p>\n<p>Nesse tutorial, ser\u00e1 mostrada uma vis\u00e3o mais pr\u00e1tica e imediata dos playbooks. Para a teoria sobre eles, veja a documenta\u00e7\u00e3o no site:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.ansibleworks.com\/docs\/playbooks.html\">Playbooks \u2014 Ansible Documentation<\/a><\/li>\n<\/ul>\n<p>Ent\u00e3o, algumas defini\u00e7\u00f5es iniciais. Primeiro, como organizar os playbooks. O ideal \u00e9 que os playbooks fique sob algum controle de vers\u00e3o &#8211; de prefer\u00eancia, o Git. Acostume-se a, sempre que alterar e testar um playbook, fazer o\u00a0<span>git commit<\/span>, adicionando um coment\u00e1rio relevante sobre a mudan\u00e7a, para consultas futuras.<\/p>\n<p>Inicialmente, vamos come\u00e7ar com um playbook que configurar\u00e1 uma m\u00e1quina base. Essa m\u00e1quina poder\u00e1, depois, ser customizada para ser um servidor PostgreSQL ou Tomcat, atrav\u00e9s de outro playbook. Ent\u00e3o, vamos ver como criar e aplicar essa configura\u00e7\u00e3o.<\/p>\n<p>O primeiro passo, \u00e9 criar a estrutura de diret\u00f3rios:<\/p>\n<p>Mude para o diret\u00f3rio de playbooks:<\/p>\n<p><strong>$ cd ~\/manager\/books\/<\/strong><\/p>\n<p>Vamos chamar essa configura\u00e7\u00e3o de\u00a0<span>Basica<\/span>\u00a0e criar a estrutura. Rode os seguintes comandos:<\/p>\n<p><strong>$ mkdir Basica<br \/>\n$ mkdir -p Basica\/uploads<br \/>\n$ cd Basica<\/strong><\/p>\n<p>* Copie um arquivo\u00a0<span>\/etc\/sudoers<\/span>\u00a0de um S.O. identico ao qu\u00ea voc\u00ea vai instalar para o diret\u00f3rio\u00a0<span>uploads<\/span>.<\/p>\n<p>O diret\u00f3rio\u00a0<span>Basica\/uploads<\/span>, agora, dever\u00e1 conter o arquivo\u00a0<span>sudoers<\/span>\u00a0copiado.<\/p>\n<p>Edite esse arquivo, com o editor de sua prefer\u00eancia (<strong>vim uploads\/sudoers<\/strong>) e adicione a seguinte linha no final do arquivo:<\/p>\n<div>operador\u00a0\u00a0 ALL=(ALL) NOPASSWD:ALL<\/div>\n<p>Agora, vamos criar o playbook que vai enviar esse arquivo para o servidor, com as permiss\u00f5es corretas. Agora, edite o arquivo\u00a0<span>Basica.yml<\/span>\u00a0e adicione o seguinte conte\u00fado:<\/p>\n<div>&#8212;<br \/>\n&#8211; hosts: all<br \/>\nuser: operador<br \/>\nsudo: yes<br \/>\ntasks:<br \/>\n&#8211; name: Ativando o sudo sem senha<br \/>\naction: copy src=.\/uploads\/sudoers dest=\/etc\/sudoers owner=root group=root mode=0440<\/p>\n<p>&#8211; name: (A) Remove o sources.list original<br \/>\naction: shell rm -f \/etc\/apt\/sources.list<\/p>\n<p>&#8211; name: (B) Baixando o sources.list<br \/>\naction: get_url url=http:\/\/172.25.137.131\/sources\/sources12.04.list dest=\/etc\/apt\/sources.list owner=root group=root mode=0644<\/p>\n<p>&#8211; name: Atualizando o cache do apt<br \/>\naction: apt update_cache=yes<\/p>\n<p>&#8211; name: Atualizando o sistema<br \/>\naction: apt upgrade=full<\/p>\n<p>&#8211; name: Criando o locale pt_BR.UTF-8<br \/>\naction: shell locale-gen pt_BR.UTF-8<\/p>\n<p>&#8211; name: Atualizando todos os locales<br \/>\naction: shell locale-gen<\/p>\n<p>&#8211; name: Instala o DKMS<br \/>\naction: apt name=dkms state=latest<\/p>\n<p>&#8211; name: Instalando o Build-essential<br \/>\naction: apt name=build-essential state=latest<\/p>\n<p>&#8211; name: Mudando o scheduler de disco default para NOOP<br \/>\naction: lineinfile dest=\/etc\/default\/grub regexp=&#8217;^GRUB_CMDLINE_LINUX_DEFAULT=&#8217; line=GRUB_CMDLINE_LINUX_DEFAULT\\=\\&#8221;elevator\\=noop\\&#8221;<\/p>\n<p>&#8211; name: Mudando o scheduler de disco para NOOP<br \/>\naction: lineinfile dest=\/etc\/default\/grub regexp=&#8217;^GRUB_CMDLINE_LINUX=&#8217; line=GRUB_CMDLINE_LINUX\\=\\&#8221;elevator\\=noop\\&#8221;<\/p>\n<p>&#8211; name: Atualizando o Grub<br \/>\naction: shell sudo update-grub<\/p>\n<p>&#8211; name: Limpa o cache do Apt<br \/>\naction: shell sudo apt-get clean all<\/p>\n<p>&#8211; name: Reiniciando o servidor<br \/>\naction: command reboot<\/p><\/div>\n<p>O playbook acima \u00e9, praticamente, autoexplicativo. O mais not\u00e1vel \u00e9 que ele altera arquivos de configura\u00e7\u00e3o do sistema para a op\u00e7\u00e3o desejada (os m\u00f3dulos lineinfile).<\/p>\n<p>Obs.: as a\u00e7\u00f5es (A) e (B) s\u00f3 s\u00e3o necess\u00e1rias, se voc\u00ea usa um\u00a0<span>sources.list<\/span>\u00a0customizado. Sen\u00e3o, retire-as do playbook.<\/p>\n<p>Para executar esse playbook:<\/p>\n<p><strong>$ ansible-playbook &#8211;ask-sudo-pass Basica.yml<\/strong><\/p>\n<p>A raz\u00e3o da op\u00e7\u00e3o\u00a0<span>&#8211;ask-sudo-pass<\/span>\u00a0\u00e9 que, nesse momento, o S.O. ainda est\u00e1 pedindo senha para fazer\u00a0<span>sudo su &#8211;<\/span>. Ele executar\u00e1 um pouco e falhar\u00e1, porque est\u00e1 esperando o prompt de\u00a0<span>sudo<\/span>. Mas na segunda vez, execute-o assim:<\/p>\n<p><strong>$ ansible-playbook Basica.yml<\/strong><\/p>\n<p>Depois do playbook ser executado, ele n\u00e3o mais pedir\u00e1 senha para comandos administrativos.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><b>ansible_hosts \/ arquivo Ansible Host<\/b><\/p>\n<div>\n<h1>Senhas ansible_hosts<\/h1>\n<p>Particularmente, eu prefiro o uso do arquivo\u00a0<span>ansible_hosts<\/span>\u00a0com usu\u00e1rio e senhas. Mas, se quiseres usar por chave mesmo, eu recomendo o seguinte: se a quantidade de servidores for muito grande (como \u00e9 o caso de voc\u00eas), coloquem a senha no\u00a0<span>ansible_hosts<\/span>, como no exemplo que mandei, rodem os comandos abaixo:<\/p>\n<p>1. Enviando sua chave somente para o servidor\u00a0<span>nova<\/span>:<\/p>\n<p><strong>$ ansible all &#8211;limit nova -m copy -a &#8216;src=~\/.ssh\/id_rsa.pub dest=~\/minhachave.pub&#8217;<\/strong><\/p>\n<p>2. Verifique se o servidor realmente tem o diret\u00f3rio\u00a0<span>.ssh<\/span>\u00a0com a chave privada:<\/p>\n<p><strong>$ ansible all &#8211;limit nova -m shell -a &#8216;ls .ssh -al&#8217;<\/strong><\/p>\n<blockquote><p>nova | FAILED | rc=2 &gt;&gt;<br \/>\nls: cannot access .ssh: No such file or directory<\/p><\/blockquote>\n<p>Nesse caso, n\u00e3o tem. Ent\u00e3o, vou mandar criar remotamente a chave:<\/p>\n<p><strong>$ ansible all &#8211;limit nova -m shell -a &#8220;ssh-keygen -P &#8216;f0rm1g@&#8217; -f \/home\/operador\/.ssh\/id_rsa&#8221;<\/strong><\/p>\n<p>2. Agora sim, voc\u00ea pode adicionar sua chave copiada no passo 1 para o servidor:<\/p>\n<p><strong>$ ansible all &#8211;limit nova -m shell -a &#8220;cat minhachave.pub &gt;&gt;.ssh\/authorized_keys&#8221;<\/strong><\/p>\n<p>3. Garantindo que o arquivo\u00a0<span>authorized_keys<\/span>\u00a0esteja com as permiss\u00f5es corretas:<\/p>\n<p><strong>$ ansible all &#8211;limit nova -m shell -a &#8220;chmod 644 .ssh\/authorized_keys&#8221;<\/strong><\/p>\n<p>Nesse ponto, voc\u00ea j\u00e1 deveria conseguir fazer SSH para o servidor sem precisar de senha. Agora, retire as senhas do\u00a0<span>ansible_hosts<\/span>.<\/p>\n<p>Ou, ent\u00e3o, deixe apenas uma pessoa com o arquivo com senhas, respons\u00e1vel por enviar as chaves para os servidores e os outros conectam apenas por chave.<\/p>\n<p>P.S.: lembre-se que, se o arquivo\u00a0<span>ansible_hosts<\/span>\u00a0est\u00e1 sem as senhas, ser\u00e1 preciso adicionar &#8220;<span>&#8211;ask-pass<\/span>&#8221; nas chamadas do Ansible, para que ele pe\u00e7a a senha.<\/p>\n<h1>Criando arquivo Ansible Host<\/h1>\n<p>Para cria\u00e7\u00e3o do arquivo\u00a0<span>ansible_host<\/span>, \u00e9 necess\u00e1rio editar o arquivo:<\/p>\n<p>Obs.: coloquei as barras como coment\u00e1rios no arquivo.<\/p>\n<div>[centos]\u00a0\u00a0\/\/ Nome do Grupo de Host<br \/>\n34 ansible_ssh_host=172.25.137.34 ansible_ssh_user=root ansible_ssh_pass=xxxx23<br \/>\n101 ansible_ssh_host=172.25.137.101 ansible_ssh_user=root ansible_ssh_pass=xxxx23<br \/>\n129 ansible_ssh_host=172.25.137.129 ansible_ssh_user=root ansible_ssh_pass=xxxx23<br \/>\n132 ansible_ssh_host=172.25.137.132 ansible_ssh_user=root ansible_ssh_pass=xxxx23<\/div>\n<p>Na ordem de leitura e composta de:<\/p>\n<ol>\n<li>Nome do host.<\/li>\n<li>IP ou DNS de destino onde ser\u00e1 executado o procedimento.<\/li>\n<li>Usu\u00e1rio que ir\u00e1 conectar ao host.<\/li>\n<li>Senha de acesso ao host.<\/li>\n<\/ol>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o Ansible\u00a0\u00e9 uma solu\u00e7\u00e3o para gerenciar os complexos ambientes de hoje em dia &#8211; Clouds, ambientes virtualizados, um crescente n\u00famero de servidores e a sempre demanda por mais. \u00c9 um modo seguro, consistente e confi\u00e1vel de gerenciar seu ambiente, sem os problemas de outras ferramentas que adicionam mais complexidade ainda, a um problema que j\u00e1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[79,42,51,68,271],"tags":[431,432,433],"class_list":["post-695","post","type-post","status-publish","format-standard","hentry","category-firewall","category-leitura-recomendada","category-linux-linuxrs","category-redes-2","category-seguranca-2","tag-ansible","tag-automatizando","tag-data-center"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=695"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/695\/revisions"}],"predecessor-version":[{"id":696,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/695\/revisions\/696"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}