Ansible / Puppet
André “Ramoni” Guimarães
https://ramoni.com.br
Ansible / Puppet
Exemplos
Considerações
Conclusão
Exemplos
Exemplos
Considerações
Conclusão
Facts
Ansible
“facter_os": {
"architecture": "x86_64",
"family": "RedHat",
"hardware": "x86_64",
"name": "CentOS",
"release": {
"full": "7.3.1611",
"major": "7",
"minor": "3"
},
"selinux": {
"enabled": false
}
},
Exemplos
Considerações
Conclusão
Puppet
os => {
architecture => "x86_64",
family => "RedHat",
hardware => "x86_64",
name => "CentOS",
release => {
full => "7.3.1611",
major => "7",
minor => "3"
},
selinux => {
enabled => false
}
}
Linguagem
Ansible
Python
YAML
Exemplos
Considerações
Conclusão
Puppet
Ruby
Ruby like
Instalar pacote
Ansible
- package:
name: htop
state: present
Exemplos
Considerações
Conclusão
Puppet
package { ‘htop’:
ensure => present,
}
Subir serviço
Ansible
- service:
name: crond
state: started
enabled: true
Exemplos
Considerações
Conclusão
Puppet
service { ‘crond’:
ensure => running,
enable => true,
}
Criar usuário
Ansible
- user:
name: infra
state: present
shell: /bin/bash
group: admin
password: {{ infra_passwd_hash }}
Exemplos
Considerações
Conclusão
Puppet
user { ‘infra’:
ensure => present,
shell => ‘/bin/bash’,
gid => ‘admin’,
password => $infra_passwd_hash,
}
Condicionais
Exemplos
Considerações
Conclusão
Ansible
- package:
name: open-vm-tools
state: present
when:
- facter_virtual == “vmware”
- (ansible_os_family == “RedHat” and ansible_distribution_major_version >= 6) or
(ansible_os_family == “Debian” and ansible_distribution_major_version >= 7)
Puppet
if ( $::virtual == ‘vmware’ ) {
if ( $::osfamily == ‘RedHat’ and $::lsbmajdistrelease >= 6)
or ( $::osfamily == ‘Debian’ and $::lsbmajdistrelease >= 7) {
package { ‘open-vm-tools’:
ensure => present,
}
}
}
Loops
Ansible
- package:
name: "{{ item }}"
state: present
with_items:
- htop
- nload
- strace
Exemplos
Considerações
Conclusão
Puppet
$packages = [ ‘htop’, ‘nload’, ‘strace’ ]
package { $packages:
ensure => present,
}
Package / File / Service
Ansible
- package:
name: squid
state: present
- copy:
src: squid.conf
dest: /etc/squid/squid.conf
- service:
name: squid
state: started
enabled: true
Exemplos
Considerações
Conclusão
Puppet
package { ‘squid’:
ensure => present,
}
file { ‘/etc/squid/squid.conf’:
source => ‘puppet://modules/squid.conf’
}
service { ‘squid’:
ensure => running,
enable => true,
}
Templates
Ansible
Jinja2
# cat resolv.conf.j2
search {{ dns_domain }}
domain {{ dns_domain }}
{% for server in dns_servers %}
nameserver {{ server }}
{% endfor %}
Exemplos
Considerações
Conclusão
Puppet
Erb
# cat resolv.conf.erb
search <%= dns_domain %>
domain <%= dns_domain %>
<% @dns_servers.each do |server| -%>
nameserver <%= server %>
<% end -%>
Instalação
Ansible
# yum install ansible
Ready to go !
Criar inventário e playbooks
Exemplos
Considerações
Conclusão
Puppet
Instalar servidor Puppet
Instalar agente nos nodes
Criar classes e classificar
Fazem a mesma coisa ?
Exemplos
Considerações
Conclusão
Considerações
Exemplos
Considerações
Conclusão
Push vs Pull
Ansible
Hein ?
Push
Agentless
Problemas com NATs e rotas
Não escala
Exemplos
Considerações
Conclusão
Puppet
Teoria da promessa
Pull
Precisa de agente
Conexão do agente ao Puppet
Escalabilidade
Descentralizado
vs centralizado
Ansible
Bazar
Cada ansible no seu quadrado
Cagadas pontuais
Flexibilidade e agilidade
Report é STDOUT
Exemplos
Considerações
Conclusão
Puppet
Catedral
Um anel para controlar todos
Cagadas generalizadas
Responsabilidade e controle
Reports centralizados
Executar vs assegurar
Ansible
Cron / Rundeck / Tower / AWX
Exemplos
Considerações
Conclusão
Puppet
Drift de 30 minutos
Tshoot
Ansible
Sem interferência
Lembrar de mudar depois
Exemplos
Considerações
Conclusão
Puppet
Parar o agente do Puppet
Report de nodes que não se
reportam
Facts
Ansible
Facts defasados
Exemplos
Considerações
Conclusão
Puppet
Inventário atualizado
Pode executar ação quando um fact
mudar
Ordem de execução
Ansible
Em sequência
Exemplos
Considerações
Conclusão
Puppet
Você precisa especificar as
dependências
Idempotência
Ansible
Multiplos pontos de controle
Lista de ações a serem executadas
Pode executar ações opostas em
cada execução
Até na mesma execução…
Exemplos
Considerações
Conclusão
Puppet
Único ponto de controle
Estado final desejado
Reclama se houver inconsistência
Roles / Módulos
Ansible
HAproxy (1.4k)
Keepalived (6.7k)
Redis (252k) (+baixado do galaxy)
Consul (784)
Cassandra (63)
Exemplos
Considerações
Conclusão
Puppet
HAproxy (2.3M, supported)
Keepalived (5.1M, supported)
Redis (681k)
Consul (3.7M, aproved)
Cassandra (584k)
Módulos para windows
Ansible
Módulos específicos
win_file & win_copy
win_service
win_package
win_user
Exemplos
Considerações
Conclusão
Puppet
Recursos nativos
file
service
package
user
Ferramentas auxiliares
Ansible
Tower / AWX / ARA
Reports
Workflows
Exemplos
Considerações
Conclusão
Puppet
Foreman / Satellite
Reports
Provisionamento, IPAM
Inventário
Fazem a mesma coisa ?
Exemplos
Considerações
Conclusão
Conclusão
Exemplos
Considerações
Conclusão
O cagaço
Ansible
De executar todos os playbooks
Cagadas só quando executar
Não há como saber o drift
No ruim: CTRL+C
Exemplos
Considerações
Conclusão
Puppet
De alguém comitar uma cagada
Cagadas épicas
Drift de 30 minutos
No ruim: mata o Puppet
Consultoria local
Ansible
Sem necessidade de infra
Rodar da própria máquina
Se quebrarem, chama de novo
Exemplos
Considerações
Conclusão
Puppet
Instalar ambiente do Puppet server
Instalar agente e classificar
Se quebrarem, conserta sozinho
Consultoria remota
Ansible
Tem que alcançar a rede do cliente
Cliente vai criar uma VPN pra você
Exemplos
Considerações
Conclusão
Puppet
Ter um Puppet na AWS com todo
seu portfolio de serviços
Cliente pode instalar o agente e
apontar pro seu Puppet
Seu Puppet instala MCO
Aplicar melhorias posteriormente
Cenário ideal
Ansible
Times diferentes com acessos à
servidores diferentes ou em comum
Orquestração complexa
Exemplos
Considerações
Conclusão
Puppet
Gerenciamento centralizado em uma
equipe, regras centralizadas
Conformidade e correção automática
Conclusão
Para cada problema, uma delas será a melhor ferramenta.
Use a ferramenta que mais se alinhar com seu ambiente.
Quem disse que só pode usar uma ? Não martele parafusos.
Se há demanda para as duas ferramentas, use as duas. Ou as quatro.
Foreman
https://theforeman.org & https://goo.gl/JzhE9n
“Foreman is a complete lifecycle management tool for physical and virtual
servers.”
Integração com Ansible, Chef, Salt e Puppet (classificação e reports)
Provisionamento (AWS, VMware, Openstack, Azure, Bare Metal etc)
IPAM
Execução e agendamento de tarefas
Mcollective
Mcollective
Ansible e Puppet
https://ansible.com
https://puppet.com
Obrigado
André “Ramoni” Guimarães
https://ramoni.com.br

Puppet vs ansible