ANSIBLE – Instalação, inventário, playbooks

E aehh galera!!!
Bom, começei a estudar o Ansible, segue aí minhas anotações. Qualquer dúvida ou contribuição, mande nos comentários.

1. Instalação do Ansible

Infraestrutura de estudo utilizada neste Lab:
S.O: Ubuntu 16.04 – 64-bit para todos os servidores
AnsibleControl-01 – Onde será instalado o Ansible. Será o servidor de administração do
ambiente. O Ansible vai ser instalado apenas neste servidor.
APP-01 – Webserver (Apache ou Nginx).
DB-01 – Banco de dados
LB-01 – Loadbalancer

1.1. Documentação – Página de instalação do Ansible

http://docs.ansible.com/ansible/latest/intro_installation.html

1.2. Instalação do repositório PPA do Ansible, update do repositório e instalação do Ansible

Logado no servidor de controle ansiblecontro-01, execute os passos para instalação do
reposítório e Ansible.

# apt-get install software-properties-common
# apt-add-repository ppa:ansible/ansible
# apt-get update
# apt-get install ansible

Verifique a versão do Ansible.

# ansible --version
# ansible-playbook --version

2. Inventários

Um inventário no Ansible pode entender-se como uma lista de servidores/hosts que serão genrenciados pelo Ansible.
Por padrão, seu invetário de hosts é definido no arquivo “/etc/ansible/hosts”.
Você pode criar grupos de hosts ou simplesmente criar uma lista de hosts sem qualquer grupo.

Exemplos:
Sem grupos

# cat /etc/ansible/hosts
lb-01.devopslab.com.br
app-01.devopslab.com.br
db-01.devopslab.com.br

Servidores organizados por grupos.

cat /etc/ansible/hosts

[loadbalancer]
lb-01.devopslab.com.br

[webserver]
app-01.devopslab.com.br
app-02.devopslab.com.br

[database]
db-01.devopslab.com.br

[ansible]
ansiblecontrol-01.devopslab.com.br

2.1.  Listando todos os servidores com o comando “ansible –list-hosts all”

# ansible --list-hosts all
hosts (5):
db-01.devopslab.com.br
app-01.devopslab.com.br
app-02.devopslab.com.br
ansiblecontrol-01.devopslab.com.br
lb-01.devopslab.com.br

 

2.2. Tipo de conexão

Ao criar os hosts do invetário, é possível definir o tipo de conexão que o Ansible vai tentar fazer nos hosts.

/etc/ansible/hosts
[ansible]
ansiblecontrol-01.devopslab.com.br ansible_connection=local
Veja que nesta forma, o Ansible vai tentar fazer uma conexão local, sem utilizar o padrão ssh.

2.3. Inventário não padrão !hosts

Também é possível criar um inventário de hosts em um arquivo que não seja o padrão
/etc/ansible/hosts

ansible -i servidores-prod --list-hosts all
ansible -i servidores-homol --list-hosts all
ansible -i servidores-dev --list-hosts all

No caso, eu criei um arquivo para cada grupo de servidores.

3. Comandos Ansible

Comandos Ansible para diversos usos. Em andamento…

Listagem de hosts:

ansible --list-hosts all
ansible --list-hosts "app*"
ansible --list-hosts "lb*"

Listagem de hosts com negação:

ansible --list-hosts \!app*

4. Tasks

Execução de comandos/tarefas.


-m MODULE_NAME, –module-name=MODULE_NAME
module name to execute (default=command)

Execução em todos os hosts listados em “/etc/ansible/hosts”

# ansible -m ping all
# ansible -m command -a "hostname" all

Execução em um único host.

# ansible -a "echo hello" app-01.devopslab.com.br

DOC com vários módulos suportados pelo Ansible:
https://docs.ansible.com/ansible/devel/modules/list_of_commands_modules.html

5. Playbook

O lance do Playbook do Ansible, é você escrever todas as tarefas que você precisa executar em um arquivo YAML, ou seja, são nos playbooks que você vai organizar a automação.

Alguns Playbooks simples.
Crie uma pasta para armazenar seus Playsbooks.

/etc/ansible/playbooks

1.
HOSTNAME
/etc/ansible/playbooks/hostname.yml

---
   - hosts: all
     tasks:
      - command: hostname

DATE
/etc/ansible/playbooks/date.yml

---
   - hosts: all
     tasks:
      - command: date

execução do playbook

ansible-playbook hostname.yml
ansible-playbook date.yml

 

6. Suporte a Python3 – Utilização da variável ansible_python_interpreter

Algumas distribuições não tem um python instalado, e sim o python3. É o caso do Ubuntu 16.

Sistema Operacional:


@lb-01:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial


@lb-01:~$ python3  [tab]
python3 python3.5 python3.5m python3m

 

$ ansible -m command -a "hostname" lb-01.devopslab.com.br

lb-01.devopslab.com.br | FAILED! => {
 "changed": false, 
 "module_stderr": "Shared connection to lb-01.devopslab.com.br closed.\r\n", 
 "module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n", 
 "msg": "MODULE FAILURE", 
 "rc": 127
}

Para resolver este pequeno problema, na definição do seu inventário, informe para que o grupo em questão utilize o python3 ou a versão do Python que você precise no momento.

/etc/ansible/hosts

[loadbalancer]
lb-01.devopslab.com.br

[loadbalancer:vars]
ansible_python_interpreter=/usr/bin/python3

Para validar, execute qualquer comando via ansible.

$ ansible -m command -a "hostname" lb-01.devopslab.com.br
lb-01.devopslab.com.br | SUCCESS | rc=0 >>
lb-01.ir7.com.br

DOC Python3 Support:
https://docs.ansible.com/ansible/devel/reference_appendices/python_3_support.html

Continua.
Anotações em andamento.
; )
Leonardo