Slide 1

Slide 1 text

Rafael Dutra

Slide 2

Slide 2 text

RAFAEL DUTRA ● Ocupação: Administrador de Sistemas, “Agilista” de Infraestrutura e entusiasta Dev*Ops ● Segurança da Informação - UNISINOS 2008 - ? ● Linux desde 2005 ● Desenvolvedor: PHP (Laravel), Shell Script, Ruby ● Assuntos de interesse: Vagrant, Puppet, Terraform, Ansible, Linux, Continuous Integration, Continuous Deployment/Delivery, Shell Scripting, IaC, Docker, AWS, Android, Video Games (FPS e RPG)...

Slide 3

Slide 3 text

AGENDA ● O que é Ansible? ● Por que utilizar Ansible? ● O que são os Facts ● Ad-Hoc comandos ● Como Ansible funciona ● Terminologias (Inventory, Tasks, Playbooks, Roles) ● Exemplos de arquivos ● Demonstração

Slide 4

Slide 4 text

O QUE É ANSIBLE? ● Software Open Source ● Ferramenta para automação de aplicações, serviços e provisionamento de servidores/máquinas/ativos de rede ● Funciona em Linux, Windows e MacOS ● Arquitetura agentless (não precisa de agente) ● Utiliza arquivos YAML para definir tarefas (tasks)

Slide 5

Slide 5 text

POR QUE UTILIZAR ANSIBLE? ● Provisionamento ● Gerenciamento de configuração ● Deploy de aplicações ● Redução de erros ● Reuso/reaproveitamento

Slide 6

Slide 6 text

O QUE SÃOS OS FACTS ● Informações extraídas dos hosts. ○ Endereço IP, S.O., Hostname, Disco. ● Ver informações disponíveis. - debug: var=ansible_facts ● Desativando a coleta dos facts. - hosts: all gather_facts: no

Slide 7

Slide 7 text

Ad-HOC comandos ● Comandos ad-hoc vs playbooks ○ Realizar ações “simples” ○ Não são reutilizáveis ○ Realizados via CLI (Command Line Interface)

Slide 8

Slide 8 text

COMO ANSIBLE FUNCIONA

Slide 9

Slide 9 text

TERMINOLOGIAS ● Inventory: Grupos de máquinas. ● Tasks: Simples tarefas em um arquivo. ● Playbooks: Define o que deve ser executado ● Roles: Coleção de variables, services, tasks, files e templates de forma independente (reuso). ● Galaxy: Gerenciador de roles, onde a comunidade lança roles para serem utilizadas.

Slide 10

Slide 10 text

INVENTORY - INTRODUÇÃO ● Definição de hosts e grupo de hosts ● Local padrão é localizado em /etc/ansible/hosts ● É possível criar vários arquivos hosts e passar o arquivo como argumento (muito utilizado) ● Podemos passar variáveis para hosts e grupos https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

Slide 11

Slide 11 text

[apps] app-1.dominio.com.br app-2.dominio.com.br [databases] database-[10:20].dominio.com.br [apps:vars] ansible_python_interpreter=/usr/bin/python3 ansible_user=diego INVENTORY

Slide 12

Slide 12 text

[apps] app-1.dominio.com.br app-2.dominio.com.br [databases] database-[10:20].dominio.com.br database-[50:72].dominio.com.br [applications:children] apps databases [applications:vars] ansible_python_interpreter=/usr/bin/python3 ansible_user=rogerinho INVENTORY

Slide 13

Slide 13 text

INVENTORY - MÁQUINAS WINDOWS [winservers] winserver01 winserver02 [winservers:vars] ansible_user = admin ansible_password = pass ansible_port = 5986 ansible_connection = winrm ansible_winrm_server_cert_validation = ignore

Slide 14

Slide 14 text

TASKS ● Composto de várias instruções que serão seguidas de forma estruturadas ● Podem ser feitas em vários arquivos e depois fazer o reagrupamento utilizando include_tasks: app.yml

Slide 15

Slide 15 text

TASKS - name: install curl package # descrição apt: # nome do módulo name: curl # nome do pacote state: present # present/absent/latest - name: install git package # descrição apt: # nome do módulo name: git # nome do pacote state: present # present/absent/latest

Slide 16

Slide 16 text

TASKS - REPETIÇÕES - name: install {{ packages }} package apt: name: “{{ packages }}” vars: # variáveis packages: # pacotes - curl - git state: present # estado

Slide 17

Slide 17 text

PLAYBOOKS - INTRODUÇÃO ● Conjunto de instruções ● São enviadas para uma máquina ou para um grupo delas definido no arquivo hosts ● Podemos ter mais de uma instrução por arquivo

Slide 18

Slide 18 text

PLAYBOOK - NGINX --- - name: running a web playbook hosts: apps remote_user: ubuntu tasks: - name: installing nginx package apt: name: nginx state: installed

Slide 19

Slide 19 text

PLAYBOOK - WORDPRESS STACK --- - name: install WordPress, MySQL, Nginx, and PHP-FPM hosts: all remote_user: ubuntu roles: - common - mysql - nginx - php-fpm - wordpress

Slide 20

Slide 20 text

ROLES ├── defaults │ └── main.yml ├── handlers │ └── main.yml ├── LICENSE ├── meta │ └── main.yml ├── README.md ├── tasks │ ├── docker-compose.yml │ ├── docker-users.yml │ ├── main.yml │ ├── setup-Debian.yml │ └── setup-RedHat.yml └── tests ├── README.md └── test.yml 5 directories, 12 files

Slide 21

Slide 21 text

SERVICES ● Controla serviços em hosts remotos e suporta vários tipos de sistemas de serviços, como: ○ BSD init ○ OpenRC ○ SysV ○ Solaris SMF ○ systemd (normalmente utilizamos) ○ upstart https://docs.ansible.com/ansible/latest/modules/service_module.html

Slide 22

Slide 22 text

SERVICES - name: start nginx # descrição service: name: nginx # nome do serviço state: started # iniciar serviço enabled: yes # iniciar automaticamente no boot

Slide 23

Slide 23 text

DEMONSTRAÇÃO

Slide 24

Slide 24 text

@raffaeldutra [email protected] https://rafaeldutra.me https://hub.docker.com/u/raffaeldutra https://linkedin.com/in/rafaeldutra https://github.com/raffaeldutra https://gitlab.com/raffaeldutra https://speakerdeck.com/raffaeldutra RAFAEL DUTRA