Provisionamento de servidores com

Ansible

by Daniel Romero / @infoslack

Daniel Romero

daniel romero

infoslack.com/about

Initsec

initsec

initsec.com

Livro

Livro começando com Linux

infoslack.com/livro

Mais um dia normal no trabalho...

aplicação pronta para deploy

o servidor precisa ser configurado

a empresa não tem mais um sysadmin

e você foi escolhido para configurar o servidor

Depois de muita pesquisa

stackoverflow

server fault

receitas prontas de shell script

você pede ajuda aos amigos

e quando você finalmente acha que está funcionando...

Configurar um servidor deve ser uma tarefa simples.

Configuration Managers

configuration managers

Ansible

Criado por Michael DeHaan

O foco da ferramenta é na simplicidade

Usa YAML como linguagem de configuração

Fácil de compartilhar tarefas

Só precisa de SSH

https://galaxy.ansible.com/

galaxy ansible

Como funciona?

Inventory: hosts e variáveis específicas;

Task: regras que serão aplicadas;

Modules: facilitadores para escrever tasks;

Play: um grupo de tasks;

Playbook: conjunto de plays;

Role: organização das tarefas;

Inventory


[app]
app.infoslack.org

[db]
master.infoslack.org
slave.infoslack.org

[api]
api.infoslack.org

[production]
web
api
db
                

Task


- apt_repository: >
  repo="deb http://nginx.org/packages/ubuntu/ trusty nginx"
  state=present
                

Playbook


---
- hosts: app
  vars:
    port: 80
  remote_user: ubuntu
  tasks:
  - name: "Install the latest Nginx version"
    apt: >
      pkg=nginx
      update_cache=yes
      cache_valid_time=3600
      state=latest
      force=yes
    notify:
    - restart nginx
  handlers:
    - name: restart nginx
      service: name=nginx state=restarted
                

Role?


server.yml
roles/
  common/
    files/
    templates/
    tasks/
    handlers/
    vars/
    defaults/
    meta/
  webservers/
    files/
    templates/
    tasks/
    handlers/
    ...
                

server.yml


---
- name: app
  hosts: web
  sudo: yes
  user: ubuntu

  roles:
    - common
    - firewall
    - nginx
    - postgresql

- name: Alert
  hosts: notify
  tasks:
    - irc: >
        server=irc.freenode.net
        channel="#somechannel"
        msg="done!"
        nick=ansibleAlert
                

E na prática?

Checklist

criar uma instância

configurar o ssh

adicionar o ip para o ansible

executar o playbook

Vamos ao Demo!

Seja preguiçoso ;)

Deixe o Ansible criar a instância por você


---
- hosts: local
  connection: local
  tasks:
    - name: Provision an EC2 node
      ec2:
        key_name: infoslack
        group: ansible
        instance_type: t2.micro
        image: ami-d05e75b8
        ec2_url: ec2.us-east-1.amazonaws.com
        region: us-east-1
        vpc_subnet_id: subnet-5f698206
        wait: yes
        count: 1
        assign_public_ip: yes
      register: ec2
          

Configurando dois servers ou mais

THE END

- infoslack/ansible-rails
- ansible-tuto
- Gerenciamento de servidores com Ansible
- Ansible - variáveis, tags e loops
- ansible-book

infoslack.com/ansible