SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Introdução ao Ansible
Paulo Silva <pjs@eurotux.com>
Ansible
● Ferramenta de automação open source
● Agentless - ligação por ssh
● Push de configurações
● Sintaxe de playbooks em YAML
Como funciona
Host de
Gestão
(ansible)
Host 1
(ssh)
Host 2
(ssh)
Host N
(ssh)
Inventário
Playbook
Requisitos
Host de gestão (control machine):
● python (2.6+, 3.5+)
● ansible (package manager / pip / source)
● Windows não suportado
Hosts geridos:
● python (2.6+, 3.5+) + ssh - Linux/UNIX
● PowerShell (3+), .NET (4.0+), WinRM - Windows
Inventário
● ficheiro / pasta com hosts geridos
● grupos de hosts
● variáveis por host / grupo
● syntax INI ou YAML
● possibilidade de inventários dinâmicos (p.e.
Cobbler, EC2, OpenStack)
# cat hosts
[webservers]
web[1-3] http_port=8080
[dbs]
db1 database_name=xpto1
db2 database_name=xpto2
[datacenter:children]
webservers
dbs
[datacenter:vars]
ansible_ssh_user=pjs
ansible_become=yes
Módulos
● biblioteca de módulos instalados com o ansible
● utilização ad-hoc / playbook
● parâmetros (obrigatórios / opcionais / valores default)
● documentação: ansible-doc <módulo>
● módulos diferentes para Windows
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
Execução Ad-Hoc
Execução de comandos:
ansible <hosts> -i <inventario> -m <modulo> [-a <args>]
Exemplo: criar utiliza pjs
ansible datacenter -i host -m user -a "name=pjs state=present"
Exemplo: instalar nginx nos webservers
ansible webservers -i host -m package -a "name=nginx"
https://docs.ansible.com/ansible/latest/cli/ansible.html
Playbooks
● escrito em YAML
● compostos por uma ou mais plays
● cada play tem:
○ hosts onde é executada
○ lista de variáveis
○ uma lista de tasks sequenciais
---
- hosts: webservers
vars:
myuser: pjs
tasks:
- name: install nginx
package: name=nginx state=present
- name: create user
user:
name: "{{ myuser }}"
state: present
home: "/srv/{{ myuser }}"
- hosts: dbs
(...)
Playbooks - execução
$ ansible-playbook playbook.yml -i hosts
PLAY [webservers] **************************************************************************************
TASK [install nginx] ***********************************************************************************
changed: [web1]
changed: [web3]
changed: [web2]
TASK [create user] *************************************************************************************
changed: [web3]
changed: [web1]
changed: [web2]
PLAY RECAP *********************************************************************************************
web1 : ok=2 changed=2 unreachable=0failed=0
web2 : ok=2 changed=2 unreachable=0failed=0
web3 : ok=2 changed=2 unreachable=0failed=0
Playbooks - idempotência
$ ansible-playbook playbook.yml -i hosts
PLAY [webservers] **************************************************************************************
TASK [install nginx] ***********************************************************************************
ok: [web2]
ok: [web3]
ok: [web1]
TASK [create user] *************************************************************************************
ok: [web3]
ok: [web2]
ok: [web1]
PLAY RECAP *********************************************************************************************
web1 : ok=2 changed=0 unreachable=0failed=0
web2 : ok=2 changed=0 unreachable=0failed=0
web3 : ok=2 changed=0 unreachable=0failed=0
when - execução condicional
Exemplo:
- name: test if hostname is bad
shell: grep -c bad.domain /etc/hostname
register: my_grep
- name: "shut down CentOS 6 systems"
command: /sbin/shutdown -t now
when: my_grep.stdout == "0" and ansible_distribution == "CentOS"
Playbooks - condicionais
Playbooks - loops
loop - iterar uma task sobre elementos de uma lista
Exemplo:
- name: install nagios-plugins
package: name="{{ item }}" state=present
loop:
- nagios-plugins-http
- nagios-plugins-disk
- nagios-plugins-procs
- nagios-plugins-load
- nagios-plugins-tcp
- nagios-plugins-ping
- nagios-plugins-users
- nagios-plugins-swap
Playbooks - handler
handler - tasks que só são executadas uma vez e quando houver alterações
Exemplo:
handlers:
- name: Restart ssh
service: name=sshd state=restarted
tasks:
- name: Disable root login with password
lineinfile: dest=/etc/ssh/sshd_config regexp="^PermitRootLogin" line="PermitRootLogin without-password"
notify: Restart ssh
- name: Force ssh loglevel
lineinfile: dest=/etc/ssh/sshd_config regexp="^LogLevel" line="LogLevel VERBOSE"
notify: Restart ssh
Templates
● templates em formato Jinja2
(http://jinja.pocoo.org/docs/templates/)
● variáveis de ansible usadas dentro dos
templates
● módulo template para aplicar templates a
ficheiros
- template:
src: templates/listen.j2
dest: /etc/httpd/conf.d/listen.conf
owner: apache
group: apache
mode: 0640
$ cat templates/listen.j2
# {{ ansible_managed }}
# http port
Listen {{ http_port }}
{% if https_port is defined %}
# https port
Listen {{ https_port }}
{% endif %}
Roles
● mecanismo para organizar e reutilizar código
● cada role tem as suas variáveis, tasks, handlers
● dentro do playbook os hosts podem pertencer a uma ou mais roles
- hosts: webservers
roles:
- common
- webservers
● Ansible Galaxy - repositório de roles (https://galaxy.ansible.com/)
Mais informações
https://docs.ansible.com/ansible/latest/index.html
https://www.ansible.com/resources
https://www.udemy.com/ansible-essentials-simplicity-in-automation/
Ansible: Up and Running (ISBN: 9781491979792)
Tópicos a explorar
● Ansible em Windows
● Tower / AWX
● Desenvolvimento de plugins / módulos
● Comparação com Puppet / Chef / Salt
Dúvidas?
Obrigado!

Mais conteúdo relacionado

Mais procurados

Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website CacheavelLucas Brasilino
 
Gentoo por marcelo rocha
Gentoo por marcelo rochaGentoo por marcelo rocha
Gentoo por marcelo rochaSENAC RIO
 
Presentta: usando Node.js na prática
Presentta: usando Node.js na práticaPresentta: usando Node.js na prática
Presentta: usando Node.js na práticaNando Vieira
 
Zabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoZabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoAndré Déo
 
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy UsersTDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Userstdc-globalcode
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
IT security - Fail2ban, fail2sql e googlemaps (PT Language)
IT security  - Fail2ban, fail2sql e googlemaps (PT Language)IT security  - Fail2ban, fail2sql e googlemaps (PT Language)
IT security - Fail2ban, fail2sql e googlemaps (PT Language)Carlos Domingues
 
Sistemas operacionais 14
Sistemas operacionais 14Sistemas operacionais 14
Sistemas operacionais 14Nauber Gois
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Sistemas operacionais1
Sistemas operacionais1Sistemas operacionais1
Sistemas operacionais1Nauber Gois
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoThiago Paes
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaCentro de Sismologia - USP
 

Mais procurados (20)

Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and ZabbixZabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
Zabbix Conference LatAm 2016 - Andre Deo - SNMP and Zabbix
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website Cacheavel
 
Gentoo por marcelo rocha
Gentoo por marcelo rochaGentoo por marcelo rocha
Gentoo por marcelo rocha
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Presentta: usando Node.js na prática
Presentta: usando Node.js na práticaPresentta: usando Node.js na prática
Presentta: usando Node.js na prática
 
Zabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoZabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André Déo
 
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy UsersTDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
HOST079 - Docker
HOST079 - DockerHOST079 - Docker
HOST079 - Docker
 
Puppet 3 em 2017
Puppet 3 em 2017Puppet 3 em 2017
Puppet 3 em 2017
 
IT security - Fail2ban, fail2sql e googlemaps (PT Language)
IT security  - Fail2ban, fail2sql e googlemaps (PT Language)IT security  - Fail2ban, fail2sql e googlemaps (PT Language)
IT security - Fail2ban, fail2sql e googlemaps (PT Language)
 
Sistemas operacionais 14
Sistemas operacionais 14Sistemas operacionais 14
Sistemas operacionais 14
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Sistemas operacionais1
Sistemas operacionais1Sistemas operacionais1
Sistemas operacionais1
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para Pesquisa
 

Semelhante a DevOps Braga #5

Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com OpenstackDalton Valadares
 
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Tchelinux
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppetpericles_junior
 
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...Jeronimo Zucco
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosAlexandre Almeida
 
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Jeronimo Zucco
 
Capítulo 16 rsyslog
Capítulo 16   rsyslogCapítulo 16   rsyslog
Capítulo 16 rsyslogPaulo Kutwak
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Project HA
Project HAProject HA
Project HAKarpv
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiiMasters
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Wellington Silva
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 

Semelhante a DevOps Braga #5 (20)

Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com Openstack
 
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppet
 
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...
 
Aula 2
Aula 2Aula 2
Aula 2
 
Capítulo 16 rsyslog
Capítulo 16   rsyslogCapítulo 16   rsyslog
Capítulo 16 rsyslog
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Project HA
Project HAProject HA
Project HA
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika Heidi
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 
Puppet overview
Puppet overviewPuppet overview
Puppet overview
 

Mais de DevOps Braga

DevOps Braga #15: Agentless monitoring with icinga and prometheus
DevOps Braga #15: Agentless monitoring with icinga and prometheusDevOps Braga #15: Agentless monitoring with icinga and prometheus
DevOps Braga #15: Agentless monitoring with icinga and prometheusDevOps Braga
 
Infrastructural challenges of a fast-pace startup
Infrastructural challenges of a fast-pace startupInfrastructural challenges of a fast-pace startup
Infrastructural challenges of a fast-pace startupDevOps Braga
 
DevOps Braga #11: Docker Anatomy
DevOps Braga #11: Docker AnatomyDevOps Braga #11: Docker Anatomy
DevOps Braga #11: Docker AnatomyDevOps Braga
 
DevOps Braga #9: Introdução ao Terraform
DevOps Braga #9:  Introdução ao TerraformDevOps Braga #9:  Introdução ao Terraform
DevOps Braga #9: Introdução ao TerraformDevOps Braga
 
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOps
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOpsDevOps Braga #4: Infrastructure as Code: Impulsionar DevOps
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOpsDevOps Braga
 
DevOps Braga #7: Salt: Configuration Management
DevOps Braga #7: Salt: Configuration ManagementDevOps Braga #7: Salt: Configuration Management
DevOps Braga #7: Salt: Configuration ManagementDevOps Braga
 
DevOps Braga #3: Admin rights, everyone gets Admin rights!
DevOps Braga #3: Admin rights, everyone gets Admin rights!DevOps Braga #3: Admin rights, everyone gets Admin rights!
DevOps Braga #3: Admin rights, everyone gets Admin rights!DevOps Braga
 

Mais de DevOps Braga (8)

DevOps Braga #15: Agentless monitoring with icinga and prometheus
DevOps Braga #15: Agentless monitoring with icinga and prometheusDevOps Braga #15: Agentless monitoring with icinga and prometheus
DevOps Braga #15: Agentless monitoring with icinga and prometheus
 
Infrastructural challenges of a fast-pace startup
Infrastructural challenges of a fast-pace startupInfrastructural challenges of a fast-pace startup
Infrastructural challenges of a fast-pace startup
 
DevOps Braga #11: Docker Anatomy
DevOps Braga #11: Docker AnatomyDevOps Braga #11: Docker Anatomy
DevOps Braga #11: Docker Anatomy
 
DevOps Braga #9: Introdução ao Terraform
DevOps Braga #9:  Introdução ao TerraformDevOps Braga #9:  Introdução ao Terraform
DevOps Braga #9: Introdução ao Terraform
 
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOps
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOpsDevOps Braga #4: Infrastructure as Code: Impulsionar DevOps
DevOps Braga #4: Infrastructure as Code: Impulsionar DevOps
 
DevOps Braga #7: Salt: Configuration Management
DevOps Braga #7: Salt: Configuration ManagementDevOps Braga #7: Salt: Configuration Management
DevOps Braga #7: Salt: Configuration Management
 
DevOps Braga #3: Admin rights, everyone gets Admin rights!
DevOps Braga #3: Admin rights, everyone gets Admin rights!DevOps Braga #3: Admin rights, everyone gets Admin rights!
DevOps Braga #3: Admin rights, everyone gets Admin rights!
 
DevOps Braga #6
DevOps Braga #6DevOps Braga #6
DevOps Braga #6
 

DevOps Braga #5

  • 1. Introdução ao Ansible Paulo Silva <pjs@eurotux.com>
  • 2. Ansible ● Ferramenta de automação open source ● Agentless - ligação por ssh ● Push de configurações ● Sintaxe de playbooks em YAML
  • 3. Como funciona Host de Gestão (ansible) Host 1 (ssh) Host 2 (ssh) Host N (ssh) Inventário Playbook
  • 4. Requisitos Host de gestão (control machine): ● python (2.6+, 3.5+) ● ansible (package manager / pip / source) ● Windows não suportado Hosts geridos: ● python (2.6+, 3.5+) + ssh - Linux/UNIX ● PowerShell (3+), .NET (4.0+), WinRM - Windows
  • 5. Inventário ● ficheiro / pasta com hosts geridos ● grupos de hosts ● variáveis por host / grupo ● syntax INI ou YAML ● possibilidade de inventários dinâmicos (p.e. Cobbler, EC2, OpenStack) # cat hosts [webservers] web[1-3] http_port=8080 [dbs] db1 database_name=xpto1 db2 database_name=xpto2 [datacenter:children] webservers dbs [datacenter:vars] ansible_ssh_user=pjs ansible_become=yes
  • 6. Módulos ● biblioteca de módulos instalados com o ansible ● utilização ad-hoc / playbook ● parâmetros (obrigatórios / opcionais / valores default) ● documentação: ansible-doc <módulo> ● módulos diferentes para Windows https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
  • 7. Execução Ad-Hoc Execução de comandos: ansible <hosts> -i <inventario> -m <modulo> [-a <args>] Exemplo: criar utiliza pjs ansible datacenter -i host -m user -a "name=pjs state=present" Exemplo: instalar nginx nos webservers ansible webservers -i host -m package -a "name=nginx" https://docs.ansible.com/ansible/latest/cli/ansible.html
  • 8. Playbooks ● escrito em YAML ● compostos por uma ou mais plays ● cada play tem: ○ hosts onde é executada ○ lista de variáveis ○ uma lista de tasks sequenciais --- - hosts: webservers vars: myuser: pjs tasks: - name: install nginx package: name=nginx state=present - name: create user user: name: "{{ myuser }}" state: present home: "/srv/{{ myuser }}" - hosts: dbs (...)
  • 9. Playbooks - execução $ ansible-playbook playbook.yml -i hosts PLAY [webservers] ************************************************************************************** TASK [install nginx] *********************************************************************************** changed: [web1] changed: [web3] changed: [web2] TASK [create user] ************************************************************************************* changed: [web3] changed: [web1] changed: [web2] PLAY RECAP ********************************************************************************************* web1 : ok=2 changed=2 unreachable=0failed=0 web2 : ok=2 changed=2 unreachable=0failed=0 web3 : ok=2 changed=2 unreachable=0failed=0
  • 10. Playbooks - idempotência $ ansible-playbook playbook.yml -i hosts PLAY [webservers] ************************************************************************************** TASK [install nginx] *********************************************************************************** ok: [web2] ok: [web3] ok: [web1] TASK [create user] ************************************************************************************* ok: [web3] ok: [web2] ok: [web1] PLAY RECAP ********************************************************************************************* web1 : ok=2 changed=0 unreachable=0failed=0 web2 : ok=2 changed=0 unreachable=0failed=0 web3 : ok=2 changed=0 unreachable=0failed=0
  • 11. when - execução condicional Exemplo: - name: test if hostname is bad shell: grep -c bad.domain /etc/hostname register: my_grep - name: "shut down CentOS 6 systems" command: /sbin/shutdown -t now when: my_grep.stdout == "0" and ansible_distribution == "CentOS" Playbooks - condicionais
  • 12. Playbooks - loops loop - iterar uma task sobre elementos de uma lista Exemplo: - name: install nagios-plugins package: name="{{ item }}" state=present loop: - nagios-plugins-http - nagios-plugins-disk - nagios-plugins-procs - nagios-plugins-load - nagios-plugins-tcp - nagios-plugins-ping - nagios-plugins-users - nagios-plugins-swap
  • 13. Playbooks - handler handler - tasks que só são executadas uma vez e quando houver alterações Exemplo: handlers: - name: Restart ssh service: name=sshd state=restarted tasks: - name: Disable root login with password lineinfile: dest=/etc/ssh/sshd_config regexp="^PermitRootLogin" line="PermitRootLogin without-password" notify: Restart ssh - name: Force ssh loglevel lineinfile: dest=/etc/ssh/sshd_config regexp="^LogLevel" line="LogLevel VERBOSE" notify: Restart ssh
  • 14. Templates ● templates em formato Jinja2 (http://jinja.pocoo.org/docs/templates/) ● variáveis de ansible usadas dentro dos templates ● módulo template para aplicar templates a ficheiros - template: src: templates/listen.j2 dest: /etc/httpd/conf.d/listen.conf owner: apache group: apache mode: 0640 $ cat templates/listen.j2 # {{ ansible_managed }} # http port Listen {{ http_port }} {% if https_port is defined %} # https port Listen {{ https_port }} {% endif %}
  • 15. Roles ● mecanismo para organizar e reutilizar código ● cada role tem as suas variáveis, tasks, handlers ● dentro do playbook os hosts podem pertencer a uma ou mais roles - hosts: webservers roles: - common - webservers ● Ansible Galaxy - repositório de roles (https://galaxy.ansible.com/)
  • 17. Tópicos a explorar ● Ansible em Windows ● Tower / AWX ● Desenvolvimento de plugins / módulos ● Comparação com Puppet / Chef / Salt