Você está na página 1de 21

F13 TECNOLOGIA

Introdução Ansible
Introdução

Ansible é uma ferramenta de automação de T.I. Ele pode configurar systemas, instalar programas e
orquestrar tarefas de T.I. simples ou complexas.

O maior objetivo so Ansible é ser simples e fácil de usar, com foco em segurança e confiabilidade, com
o mínimos de pré-requisitos e movimentação de partes (recursos e bibliotecas).
v
Primariamente utiliza o SSH como ferramenta de transporte, havendo também outras possibilidades.

Objetiva possuir uma linguagem que possa ser interpretada por seres humanos e auditável em todas as
suas tarefas.

Ansible administra suas maquinas clientes sem a necessidade de instalação de um agente*.


Instalação

Instalar o Ansible é uma tarefa relativamente simples, podendo ser feita de 3 maneiras:

- Via pacotes do seu sistema operacional


- Via PIP
- Via tarball
v
Para o nó de controle (que é a máquina que roda o Ansible), você pode usar qualquer máquna com
suporte a Python 2 (2.7) ou Python 3 (versão 3.5 ou acima).

O ansible-core 2.11 e o Ansible 4 vão ter como dependência leve o Python 3.8.

No futuro, os ansible-core 2.12 and Ansible 5.0.0 vão exigir o Python 3.8 ou mais novo.

Windows não é suportado para ser o nó de controle.


Instalação

Instalação via systema operacional (pacotes):

On Fedora:
$ sudo dnf install ansible

v
On RHEL and CentOS:
$ sudo yum install ansible

On ubuntu (ansible mais novo):


$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
Instalação

Instalação via PIP:

Pré-requisitos: Instalando o pip:

$ sudo apt update


$ sudo apt install python3-pip python3-venv
v
Instalando o Ansible em um ambiente virtual com pip:

$ python3 -m venv ansible # Cria um ambiente virtual chamado ansible, se ainda não existir
$ source ansible/bin/activate # Ativa o ambiente virtual ansible
$ pip3 install ansible # Instala o ansible dentro do ambiente virtual criado

# Activate virtual environment for that user by default for ansible


$ echo "[ -r /home/$USER/ansible/bin/activate ] && . /home/$USER/ansible/bin/activate # python virtual environment for ansible" >> ~/.bashrc
Conhecendo o Ansible

Os conceitos que citamos abaixo são comuns em todos os usos do Ansible. Você deve conhecer estes
conceitos para praticamente todos os sistemas de automação.

Aqui vamos citar as informações mais básicas para o entendimento da estrutura do Ansible:

- Control node; v
- Managed nodes;
- Inventory;
- Collections;
- Modules;
- Tasks;
- Playbooks;
Conhecendo o Ansible

Control node

Qualquer máquina com o Ansible instalado. Você deve ser capaz de rodar comandos e executar
playbooks através dos comandos ansible ou ansible-playbook.

Você pode usar qualquer computador com Python instalado como Control Node (nó de controle).
v
Laptops, desktops e servidores (mais indicado). No entanto, não pode utilizar uma máquina com
Windows.

Você pode possuir múltiplos Control Nodes na sua estrutura.


Conhecendo o Ansible

Managed nodes

Managed nodes, ou nós gerenciados, são todo e qualquer dispositivo de rede ou servidor gerenciado
pelo Ansible.

Nós gerenciados por vezes são chamados de “hosts”. O Ansible não precisa ser instalado nos nós
v
gerenciados, contudo existem alguns pré-requisitos para um dispositivo ser gerenciado pelo Ansible:

Apesar de não precisar de um “daemon” ansible rodando nos nós, você precisa conseguir se
comunicar com o nó gerenciado. Para a maior parte dos casos, o Ansible utiliza uma conexão SSH e
faz a transferência dos módulos e informações via SFTP.

Para o “hosts” que podem rodar python, você precisa de um Python 2 (2.6 ou superior) ou Python 3
(version 3.5 ou superior).

Importante lembrar que alguns módulos podem necessitar de complementos adicionais instalados no
“host”. Isto deve estar informado dentro da documentação do módulo.
Conhecendo o Ansible

Collections

Collections são um formato de distribuição de conteúdo para o Ansible. Um Collection pode conter
playbooks, roles, modules, e plugins.

Você pode gerenciar suas coleções através do ansible-galaxy.


v
Conhecendo o Ansible

Modules

São as unidades de código executadas pelo Ansible.

Cada módulo tem um uso particular, desde administrar usuários, até adicionar VLANs em um switch.
v
Você faz a invocação de um módulo através de uma “task”, ou invocar diferentes módulos através de
um playbook.

Desde de o Ansible 2.10, módulos podem ser agrupados em “collections”.


Conhecendo o Ansible

Tasks

São as unidades de ação do Ansible.

Você pode executar “tasks” (tarefas) únicas através de comandos ad-hoc.


v
Conhecendo o Ansible

Playbooks

São listas ordenadas de tasks (tarefas). Esta lista fica salva dentro de um arquivo e você pode rodar
quantas vezes você quizer, que elas sempre serão executadas me todos os nós, na ordem correta,

Playbooks pode incluir variáveis e tarefas. São escritos em syntaxe YAML.


v
Estrutura inicial

Vamos agora criar o “environment” inicial para uso do ansible.

Para isto, vamos executar os seguintes passos:

- Criar a chave ssh do usuário “admin”;


- Copiar a chave ssh para todos os hosts; v
- Criar a estrutura inicial de diretórios;
- Criar o inventário mínimo;
- Testar;
Estrutura inicial

Criar a chave ssh do usuário “admin”

Primeiro temos que criar a chave ssh do usuário utilizado para o Ansible. O nome “admin” é apenas um
conceito, não uma obrigação de nome.

Não obrigatóriamente o usuário que usaremos junto aos hosts administrados terá o mesmo nome do
v
usuário do Controler, mas isso facilita as coisas do dia a dia.

Para gerar a chave, como usuário “admin”, digite o seguinte:

$ ssh-keygen

Como é um ambiente de estudo, simplesmente aperte Enter em todos as peguntas a seguir.


Estrutura inicial

Copiar a chave ssh para todos os hosts

Você agora vai copiar a chave para dentro do home do usuário com o qual você quer se conectar, ou
seja, o usuário do host que será gerenciado.

Esta chave vai proporcionar que você realize esta mesma conexão no futuro sem senha. Por motivos
v
técnicos, este usuário precisa possuir uma senha e poder utilizar o ssh por senha e por chave.

Aconselhamos que o usuário destino possua sudo (também sem senha) configurado.

Agora você deve copiar a chave ssh para todos os hosts da solução:

$ ssh-copy-id <user>@<host>

Para testar: (Você deve conseguir conectar sem senha)

$ ssh user@host
Estrutura inicial

Sudo sem senha

Caso a máquina gerenciada não possua sudo sem senha, você pode configurar com o seguinte
comando:

Rodar como root na maquina à ser gerenciada: v

$ echo "<user> ALL=NOPASSWD:ALL" > /etc/sudoers.d/<user>


Estrutura inicial

Criar a estrutura inicial de diretórios

Agora vamos criar a estrutura inicial de diretório para organização do nosso ambiente. Esta estrutura é
apenas o início do que será o projeto, para os primeiros comandos.

Criação do diretório base: v

$ mkdir ~/ansible-aula-intro

Diretórios do ambiente staging:

$ mkdir ~/ansible-aula-intro/inventories/staging -p

Entrando no diretório:

$ cd ~/ansible-aula-intro/
Conhecendo o Ansible

Criar o inventário mínimo

Agora vamos criar o arquivo hosts.yml. Este arquivo serve para que o ansible saiba onde ele deve
aplicar as tasks configuradas:

$ vim ~/ansible-aula-intro/inventories/staging/hosts.yml
v
Conhecendo o Ansible

hosts.yml on INI format:

mail.example.com

[wordpress]
foo.example.com v
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com
Conhecendo o Ansible

hosts.yml on YML format:

all:
hosts:
mail.example.com:
children: v
wordpress:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
Conhecendo o Ansible

Ansible ad-hoc

$ ansible all -i inventories/staging/hosts.yml -m ping

$ ansible all -i inventories/staging/hosts.yml -a "/bin/echo hello"


v
# as admin
$ ansible all -i inventories/staging/hosts.yml -m ping -u admin

# as admin, sudoing to root (sudo is default method)


$ ansible all -i inventories/staging/hosts.yml -m ping --become -u admin

# as admin, sudoing to batman (just a sample)


$ ansible all -i inventories/staging/hosts.yml -m ping -u admin --become --become-user batman

# apply reboot to wordpress group server


$ ansible wordpress -i inventories/staging/hosts.yml -a "/sbin/reboot" -f 10 # fail

Você também pode gostar