Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceitos básicos | Daniel Bruno
Daniel Bruno
Keep It Simple
Ansible – Conceitos básicos
Posted on July 16, 2015 by Daniel Bruno
O Ansible é uma ferramenta que, inicialmente pode ser categorizada como gerenciador de configuração
(configuration management), e comparado a ferramentas bastante populares como o Puppet, Salt, Chef e outos.
Mas também pode ser perfeitamente utilizado como ferramenta de deploy e orquestração de tarefas.
A comunidade de usuários e desenvolvedores do Ansible tem crescido bastante, eu particularmente acompanho a
migração na infraestrutura do Projeto Fedora do Puppet para o Ansible. O Ansible tem também uma comunidade
oficial chamada Ansible Galaxy[0], onde é possível obter playbooks para vários tipos de tarefas, e também
compartilhar os seus playbooks.
Para ajudar a ter uma ideia melhor sobre a ferramenta, vou comentar algumas características, e em seguida
mostrar alguns exemplos de instalação do Ansible e aplicação do playbook.
Playbooks – Como são chamados os arquivos de gerenciamento de configuração, é onde você irá escrever os
perfis dos seus servidores, e as tarefas que devem ser executadas. Algo bem legal a respeito dos playbooks, é sua
simplicidade, que segue o padrão YAML, que torna bastante fácil para escrever e também para ler outros
playbooks.
Agentless – Não é necessário a instalação de agentes nos servidores que serão gerenciados. O servidor com o
Ansible realiza uma coleta das informações dos servidores de destino utilizando o OpenSSH para saber o estado, e
se é necessário realizar alguma alteração, e se houver diferença entre o que está escrito no playbook, e com o
estado atual do servidor de destino, o Ansible realiza as tarefas que estão escritas.
Módulos – Existe uma grande quantidade de módulos integrados para realizar vários tipos de tarefas, como por
exemplo testar a conectividade com servidores remotos, gerenciar serviços, e uns módulos que eu particularmente
gosto bastante são os módulos para interagir com provedores de Cloud, isso ajuda bastante em tarefas de
escalabilidade de infraestrutura. É possível criar e configurar servidores, interagir com Load Balancers e etc.
Inventário – O inventário é um arquivo onde o Ansible controla grupos de hosts, e no playbook você pode
referenciar determinado grupo que já está previamente configurado no inventário. Por exemplo, você pode criar
um grupo chamado banco de dados e outro grupo chamado web, onde os hosts do grupo banco de dados serão
configurados com um banco de dados MariaDB, e os hosts do grupo web, serão configurados com uma aplicação
web, que ler e escreve nos hosts do grupo banco de dados. Em um post mais a frente, vou mostrar como gerar
inventários para ambientes dinâmicos, por exemplo com Autoscale, e utilizando o Ansible para fazer a
configuração dos hosts e aplicação, usarei como exemplo ambientes na AWS e Rackspace.
Instalação
Para os exemplos, usarei 2 hosts na Digital Ocean, na zona NYC3 que tem suporte a rede interna.
O primeiro host, onde o Ansible será instalado, vou chamar de master, e o segundo host vou chamar lamp1.
O host lamp1 está previamente configurado com a chave publica do host master.
O primeiro passo é habilitar o repositório Epel[1] na sua instalação, para isso faça a instalação do pacote RPM e
http://dbruno.org/ansible/ 1/4
24/02/2016 Ansible Conceitos básicos | Daniel Bruno
instale:
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epelrelease75.noarch.rpm
Instale o pacote:
yum install epelrelease75.noarch.rpm
Se a instalação do repositório Epel ocorrer sem problemas, já é possível instalar o Ansible através do Yum.
yum install ansible
Pronto, se não houve nenhum erro, o Ansible está instalado e pronto para trabalhar.
Configuração e inventário
Agora no inventário, vamos criar um grupo chamado lamp, e adicionar o host lamp1.
O arquivo padrão de configuração do inventário é o /etc/ansible/hosts, esse arquivo pode ser alterado em
/etc/ansible/ansible.cfg,
inventory = /etc/ansible/hosts
Para o nosso exemplo vamos usar o arquivo padrão e adicionar o host lamp1 ao grupo lamp. Edite o arquivo
/etc/ansible/hosts, e adicione as linhas abaixo:
[lamp]
lamp1
Para fazer um teste, use o módulo de ping para testar a conectividade do host master para o host lamp1.
ansible m ping lamp1
lamp1 | success >> {
"changed": false,
"ping": "pong"
}
Se acontecer algum erro com este teste, possivelmente está relacionado a autenticação via SSH.
Playbook
Vamos escrever um playbook para instalar e configurar um ambiente LAMP (Linux, Apache, MariaDB e PHP).
Tecnicamente não há nenhum impedimento de onde os playbooks devem ser armazenados, nos nossos exemplos
vamos utilizar o path /usr/local/etc/playbooks.
http://dbruno.org/ansible/ 2/4
24/02/2016 Ansible Conceitos básicos | Daniel Bruno
O playbook para instalação do nosso ambiente LAMP e da aplicação /usr/local/etc/playbooks/lamp.yml.
name: Configurar ambiente LAMP
hosts: lamp
tasks:
name: Instalar Apache (HTTPD)
yum: name=httpd
name: Iniciar HTTPD
service: name=httpd state=started
name: Instalar PHP
yum: name="{{item}}"
with_items:
php
phpcommon
phpcli
name: Instalar MariaDB
yum: name=mariadbserver
name: Instalar pythonmysqldb
yum: name=MySQLpython
name: Iniciar MariaDB
service: name=mariadb state=started
name: Definir usuario e senha
mysql_user: login_user=root login_password=123456 user=root password=123456 state=present
Agora vamos executar nosso playbook e acompanhar o resultado:
ansibleplaybook /usr/local/etc/playbooks/lamp.yml
O resultado esperado é instalação no host lamp1 dos pacotes do Apache httpd, PHP e o MariaDB configuado com
a senha “123456” para o usuário root.
O pacote MySQLpython é um requisito para que o Ansible consiga interagir com o banco de dados.
O playbook feito para este post é bastante simples, mas eu acredito que dá pra apresentar bem a ideia do
funcionamento do Ansible, porém se você pretende adotar o Ansible em ambientes corporativos, eu aconselho
uma boa leitura da documentação, e também o livro Ansible: Up & Running, onde cada ponto é explicado
detalhadamente e também com muitos exemplos práticos.
Uma outra dica, caso não pretenda investir realizando testes em algum provedor na nuvem, é a utilização do
Vagrant. No Vagrant é possível carregar um playbook no Vagrant File como provisionamento.
Caso tenha alguma sugestão sobre este post, ou dúvidas, fique a vontade para entrar em contato, ou deixar um
comentário.
[0] – http://galaxy.ansible.com/
[1] – https://fedoraproject.org/wiki/EPEL
Referências:
http://dbruno.org/ansible/ 3/4
24/02/2016 Ansible Conceitos básicos | Daniel Bruno
Hochstein, Lorin. Ansible: Up and Running. ” O’Reilly Media, Inc.”, 2014.
Ansible Documentation. About Ansible. Disponível em: <http://docs.ansible.com/>. Acesso em: 14 Jul. 2015.
This entry was posted in Ansible, Cloud, Fedora, GNU/Linux, Python and tagged Ansible, CentOS, Fedora, GNU/Linux. Bookmark the permalink.
Join the discussion…
Gessé Rocha • 4 months ago
Bacana essa introdução ao Ansible, valeu por compartilhar!
△ ▽ • Reply • Share ›
Daniel Bruno
Proudly powered by WordPress.
http://dbruno.org/ansible/ 4/4