{"id":109,"date":"2017-04-12T10:40:00","date_gmt":"2017-04-12T13:40:00","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/automatizando-ambientes-com-puppet\/"},"modified":"2026-09-08T01:54:09","modified_gmt":"2026-09-08T04:54:09","slug":"automatizando-ambientes-com-puppet","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2017\/04\/automatizando-ambientes-com-puppet\/","title":{"rendered":"Automatizando ambientes com Puppet #1"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro na sala de servidores, com quatro racks iguais controlados por fios de marionete e o logo do Puppet Labs na parede\" src=\"\/wp-content\/uploads\/2026\/09\/puppet-v4.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Nota (2026):<\/strong> Texto original de abril de 2017 \u2014 introdu\u00e7\u00e3o ao Puppet ainda no vocabul\u00e1rio Puppet Labs \/ \u201cmaster\u201d, com a promessa de um #2 pr\u00e1tico que n\u00e3o saiu. Nove anos depois a linguagem declarativa \u00e9 a mesma, mas o pacote p\u00fablico mudou de dono: a Perforce tirou os bin\u00e1rios abertos do ar no fim de 2024 e a comunidade (Vox Pupuli) segue o projeto como <strong>OpenVox 8<\/strong>. Comando, path e m\u00f3dulos da Forge continuam; o reposit\u00f3rio n\u00e3o.<\/div>\n<p>Puppet descreve o <strong>estado desejado<\/strong> da m\u00e1quina \u2014 pacote instalado, servi\u00e7o no ar, arquivo com este conte\u00fado \u2014 e o agente converte a diferen\u00e7a em a\u00e7\u00e3o. Voc\u00ea n\u00e3o escreve o \u201ccomo instalar o nginx nesta distro\u201d; escreve que o nginx precisa existir. O cat\u00e1logo cuida do resto. Em parque grande isso \u00e9 o que separa um runbook de um contrato.<\/p>\n<p><!-- more --><\/p>\n<h2>O que o Puppet faz (e o que n\u00e3o faz)<\/h2>\n<p>Criado em 2005 por Luke Kanies, o Puppet \u00e9 um gerenciador de configura\u00e7\u00e3o declarativo, Apache 2.0. Cada recurso (<code>package<\/code>, <code>file<\/code>, <code>service<\/code>, <code>user<\/code>, <code>cron<\/code>\u2026) \u00e9 um fato sobre o n\u00f3. O agente compara o fato com a realidade e aplica s\u00f3 o delta. Idempotente: rodar de novo n\u00e3o quebra o que j\u00e1 est\u00e1 certo.<\/p>\n<p>Isso cobre o que o post de 2017 listava \u2014 padronizar pacote, servi\u00e7o e arquivo em milhares de n\u00f3s, auditar drift, repor arquivo pelo filebucket. N\u00e3o cobre o que o Ansible cobre melhor: play ad-hoc, orquestra\u00e7\u00e3o ponta a ponta, \u201crode este comando agora neste grupo\u201d. S\u00e3o ferramentas vizinhas, n\u00e3o clones. O howto do Ansible no site est\u00e1 em <a href=\"\/2026\/09\/automatizando-servidores-linux-com-ansible\/\">Automatizando servidores Linux com Ansible<\/a>.<\/p>\n<p>O produto comercial da Perforce continua existindo (Puppet Enterprise). O que sumiu do mapa aberto foi o <em>yum\/apt.puppet.com<\/em> de gra\u00e7a para o parque inteiro. Quem precisa do OSS em 2026 instala <strong>OpenVox<\/strong> \u2014 a s\u00e9rie est\u00e1vel \u00e9 a 8, e a <strong>9.0.0-rc1<\/strong> saiu em 4 de setembro de 2026, ainda como candidata.<\/p>\n<h2>O ciclo: facts \u2192 cat\u00e1logo \u2192 apply \u2192 relat\u00f3rio<\/h2>\n<p>O desenho n\u00e3o mudou. Mudaram os nomes: o antigo \u201cPuppet Master\u201d \u00e9 o <code>openvox-server<\/code> (ex-<code>puppetserver<\/code>); o agente \u00e9 o pacote <code>openvox-agent<\/code>, mas o bin\u00e1rio segue se chamando <code>puppet<\/code> e mora em <code>\/opt\/puppetlabs<\/code> \/ <code>\/etc\/puppetlabs<\/code>.<\/p>\n<pre><code class=\"language-text\">n\u00f3 (agente)\n  1. coleta facts (os, mem\u00f3ria, IP, discos, custom facts)\n  2. envia facts ao servidor  \u2500\u2500\u25ba  openvox-server\n  3. servidor compilou o cat\u00e1logo deste certname\n  4. agente recebe o cat\u00e1logo  \u25c4\u2500\u2500\n  5. aplica recursos (ou --noop, s\u00f3 simula)\n  6. manda relat\u00f3rio           \u2500\u2500\u25ba  openvoxdb (opcional)\n<\/code><\/pre>\n<p>Dois modos, os mesmos de 2017:<\/p>\n<ul>\n<li><strong><code>puppet apply<\/code><\/strong> \u2014 manifesto local, sem servidor. Laborat\u00f3rio, bootstrap, m\u00e1quina \u00fanica.<\/li>\n<li><strong>Agente \/ servidor<\/strong> \u2014 o n\u00f3 pede o cat\u00e1logo de tempos em tempos (systemd timer ou daemon). Parque de verdade.<\/li>\n<\/ul>\n<pre><code class=\"language-bash\"># simula sem mudar nada\nsudo puppet agent --test --noop\n\n# aplica de verdade, verbose, uma vez\nsudo puppet agent --test\n\n# s\u00f3 local\nsudo puppet apply \/etc\/puppetlabs\/code\/environments\/production\/manifests\/site.pp\n<\/code><\/pre>\n<p>O diagrama antigo deste post ainda falava de Puppet Explorer e MCollective. Os dois sa\u00edram de cena. Console\/relat\u00f3rio hoje passam por OpenVoxDB, Foreman ou o pr\u00f3prio relat\u00f3rio do agente.<\/p>\n<h2>Um manifesto m\u00ednimo<\/h2>\n<p>Tudo no Puppet \u00e9 recurso. O exemplo abaixo instala nginx, garante o servi\u00e7o e dispara restart se o arquivo mudar \u2014 o trio que resolve 80% do \u201cquero este daemon no ar\u201d.<\/p>\n<pre><code class=\"language-puppet\"># site.pp (ou um profile)\npackage { 'nginx':\n  ensure => installed,\n}\n\nfile { '\/etc\/nginx\/nginx.conf':\n  ensure  => file,\n  owner   => 'root',\n  group   => 'root',\n  mode    => '0644',\n  source  => 'puppet:\/\/\/modules\/perfil\/nginx.conf',\n  require => Package['nginx'],\n  notify  => Service['nginx'],\n}\n\nservice { 'nginx':\n  ensure => running,\n  enable => true,\n}\n<\/code><\/pre>\n<p>A linguagem \u00e9 a mesma da apostila da comunidade BR (<a href=\"https:\/\/puppet-br.github.io\/apostila-puppet\/\">puppet-br.github.io\/apostila-puppet<\/a>) e dos m\u00f3dulos da Forge: o OpenVox 8.11+ \u00e9 funcionalmente equivalente ao Puppet 8, ent\u00e3o m\u00f3dulo, <code>Puppetfile<\/code> e livro antigo continuam v\u00e1lidos. O que n\u00e3o continua v\u00e1lido \u00e9 o reposit\u00f3rio de pacote.<\/p>\n<h2>Em 2026: instale OpenVox, n\u00e3o apt.puppet.com<\/h2>\n<p>No fim de 2024 a Perforce encerrou a publica\u00e7\u00e3o p\u00fablica dos pacotes OSS. A Vox Pupuli (Overlook InfraTech + OSUOSL no mirror) passou a rebuildar e evoluir o c\u00f3digo como <strong>OpenVox<\/strong>. Em junho de 2026 o agente est\u00e1 em <strong>8.28<\/strong>; o 9 j\u00e1 anda em beta. Red Hat Satellite 6.19 documenta OpenVox Server\/Agent 8 e trata Puppet 7 como EOL. O m\u00f3dulo <code>puppet-puppet<\/code> do Foreman aceita os nomes de pacote novos.<\/p>\n<p>Debian\/Ubuntu ainda embarcam <code>puppet-agent<\/code> 8.10 no arquivo da distro \u2014 c\u00f3digo sem upstream, bug Debian <code>#1133413<\/code> \/ Ubuntu <code>#2165065<\/code>. OpenVox est\u00e1 mais de quinze releases \u00e0 frente. N\u00e3o misture os dois no mesmo sistema: o pacote OpenVox <em>substitui<\/em> o Puppet. Antes de migrar, copie <code>\/etc\/puppetlabs\/<\/code> inteiro.<\/p>\n<pre><code class=\"language-bash\"># Ubuntu 24.04 \/ 26.04 \u2014 OpenVox 8\nwget https:\/\/apt.voxpupuli.org\/openvox8-release-ubuntu24.04.deb\nsudo apt install .\/openvox8-release-ubuntu24.04.deb\nsudo apt update\nsudo apt install openvox-agent\n\n# Debian 12\nwget https:\/\/apt.voxpupuli.org\/openvox8-release-debian12.deb\nsudo apt install .\/openvox8-release-debian12.deb\nsudo apt update\nsudo apt install openvox-agent\n\n# EL 9 (RHEL \/ Alma \/ Rocky)\nsudo dnf install https:\/\/yum.voxpupuli.org\/openvox8-release-el-9.noarch.rpm\nsudo dnf install openvox-agent\n<\/code><\/pre>\n<p>Servidor, DB e Bolt t\u00eam o mesmo prefixo: <code>openvox-server<\/code>, <code>openvoxdb<\/code>, <code>openbolt<\/code>. Keyring: <code>https:\/\/apt.voxpupuli.org\/openvox-keyring.gpg<\/code>. Guia oficial: <a href=\"https:\/\/voxpupuli.org\/openvox\/install\/\">voxpupuli.org\/openvox\/install<\/a>. Docs: <a href=\"https:\/\/docs.openvoxproject.org\">docs.openvoxproject.org<\/a>.<\/p>\n<p>Hiera para o m\u00f3dulo do Foreman, se o reposit\u00f3rio OpenVox j\u00e1 estiver no n\u00f3:<\/p>\n<pre><code class=\"language-yaml\">puppet::client_package: openvox-agent\npuppet::server_package: openvox-server\n<\/code><\/pre>\n<h2>Puppet, Ansible e o pipeline<\/h2>\n<p>Regra pr\u00e1tica no Linux de 2026:<\/p>\n<ul>\n<li><strong>Puppet\/OpenVox<\/strong> \u2014 converg\u00eancia cont\u00ednua. O n\u00f3 volta sozinho ao estado do cat\u00e1logo, de hora em hora, mesmo se algu\u00e9m \u201cconsertou na m\u00e3o\u201d.<\/li>\n<li><strong>Ansible<\/strong> \u2014 orquestra\u00e7\u00e3o e play pontual. Empurra a mudan\u00e7a agora, some. Melhor para bootstrap, patch window e o que n\u00e3o precisa de daemon no alvo.<\/li>\n<li><strong>CI\/CD<\/strong> \u2014 testa o manifesto\/playbook no Git antes de o parque receber. O vocabul\u00e1rio est\u00e1 em <a href=\"\/2019\/12\/devops-ci-cd\/\">DevOps, o que \u00e9 CI\/CD<\/a>.<\/li>\n<\/ul>\n<p>Muita gente usa os dois: Ansible (ou cloud-init) instala o agente; o OpenVox segura o estado dali pra frente.<\/p>\n<h2>O que ainda vale da lista de 2017<\/h2>\n<ul>\n<li>Parque grande com equipe pequena \u2014 o cat\u00e1logo \u00e9 o contrato, n\u00e3o o wiki.<\/li>\n<li>Filebucket \u2014 arquivo que o Puppet substituiu continua recuper\u00e1vel.<\/li>\n<li><code>--noop<\/code> \u2014 simula o run, gera o relat\u00f3rio, n\u00e3o toca o disco. Use antes de promover m\u00f3dulo novo.<\/li>\n<li>Facts \u2014 o cat\u00e1logo \u00e9 por n\u00f3; <code>os.family<\/code> escolhe o pacote certo sem <code>if ubuntu<\/code> espalhado.<\/li>\n<\/ul>\n<p>O que n\u00e3o vale: link de <code>puppetlabs.com<\/code> para download OSS, o grupo \u201cmaster\u201d, MCollective como bus, e a ideia de que <code>apt install puppet-agent<\/code> da distro est\u00e1 acompanhando o upstream.<\/p>\n<p>Comunidade BR: apostila em <a href=\"https:\/\/puppet-br.github.io\/apostila-puppet\/\">puppet-br.github.io\/apostila-puppet<\/a> e o grupo <a href=\"https:\/\/t.me\/puppetbr\">Telegram puppetbr<\/a>. C\u00f3digo e issues do fork: <a href=\"https:\/\/github.com\/openvoxproject\">github.com\/openvoxproject<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Puppet descreve o estado desejado da m\u00e1quina \u2014 pacote instalado, servi\u00e7o no ar, arquivo com este conte\u00fado \u2014 e o agente converte a diferen\u00e7a em a\u00e7\u00e3o. Voc\u00ea n\u00e3o escreve o \u201ccomo instalar o nginx nesta distro\u201d; escreve que o nginx &#8230; <a title=\"Automatizando ambientes com Puppet #1\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2017\/04\/automatizando-ambientes-com-puppet\/\" aria-label=\"Read more about Automatizando ambientes com Puppet #1\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,2,20],"tags":[47,23,4,175,22],"class_list":["post-109","post","type-post","status-publish","format-standard","hentry","category-infra","category-linux","category-puppet","tag-devops","tag-infra","tag-linux","tag-openvox","tag-puppet"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=109"}],"version-history":[{"count":7,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":1059,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/109\/revisions\/1059"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}