Ansible: conheça alguns módulos essenciais para automação.

Para quem acompanha meus artigos sabe que um dos últimos posts foi sobre Ansible também. Naquele, eu mostrei alguns comandos (ad-hoc) do Ansible na utilização conjunta com o Zabbix.
Caso você tenha perdido, segue o link para leitura e não deixe de praticar. 😉

Hoje, o artigo é sobre módulos do Ansible. Eu comecei a usar o Ansible e com isso, fiz alguns cursos e usei o material da comunidade (http://ansible-br.org). O Ansible trabalha baseado em módulos, então eu marquei alguns que achei úteis no dia a dia, e resolvi compartilhar. Pode ser que você nunca viu alguns deles, mas uma hora você pode precisar. 😜

  • Confira um pouco mais sobre o Ansible:
    - Agentless;
    - Powerful;
    - idempotente;
    - Usa SSH (não requer portas ou daemons abertos);
    - Ansible usa uma sintaxe simples (YAML);
    - Estrutura flexível (ad-hoc, playbooks, roles, tasks, inventory);
    - Facilmente extensível via módulos;
    - Criptografia e segurança integradas.
  • O que você encontrará nesse artigo:
    - Alguns módulos essenciais, como:
    (yum, copy, file, command, apt, SELinux, systemd, ec2)
    - Exemplos;
    - Conclusão.

Módulo yum: (Com esse módulo é possível instalar, atualizar, remover e listar pacotes e grupos com o gerenciador de pacotes yum).

Exemplo 1: Instalando a última versão do pacote epel-release:

- name: install the latest version of epel-release
yum:
name: epel-release
state: latest

Exemplo 2: Efetuando a atualização do sistema operacional:

- name: upgrade all packages
yum:
name: '*'
state: latest
update_cache=yes

Módulo copy: (Você pode usar o módulo copy para copiar arquivos e pastas do host local para os hosts remotos, alterar a permissão dos arquivos, etc.).

Exemplo 1: Copiando o arquivo “.conf” para o host remoto:

- name: Copy a file www.conf for server
copy: src=www.conf dest=/etc/php-fpm.d/www.conf owner=root group=root
when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS'

Exemplo 2: Copiando um arquivo setando as permissões:

- name: Copy file with owner and permission, using symbolic representation
copy:
src: /home/myfiles/users.conf
dest: /etc/users.conf
owner: root
group: root
mode: u=rw,g=r,o=r

Módulo file: ( Esse módulo faz o gerenciamento de arquivos e suas propriedades).

Exemplo 1: Agora vamos criar um diretório:

- name: Create directory /var/www/html
file: path={{item}} state=directory mode=0755 owner=nginx group=nginx
with_items:
- /var/www
- /var/www/html
notify: Restart nginx
when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS'

Exemplo 2: Criando diretórios utilizados pelo php-fpm:

- name: Create directory used by PHP-FPM
file: path={{item}} state=directory mode=755 owner=nginx group=nginx
with_items:
- /var/lib/php/session
- /var/lib/php/wsdlcache
notify: Restart php-fpm
when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS'

Módulo command: (Esse módulo é bem utilizado, ele executa comandos nos hosts remotos, vamos aos exemplos).

Exemplo 1: Cópia de segurança do nginx:

- name: Backup a file /etc/nginx
command: mv /etc/nginx /etc/nginx_original
args:
warn: false
when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS'

Exemplo 2: Executando o comando uptime no host:

- name: Execute the Uptime command
command: "uptime"

Módulo apt: (Outro módulo bem utilizado, pois trata justamente do gerenciamento de pacotes em sistemas Debian/Ubuntu).

Exemplo 1: Realizando a instalação de pacotes essenciais:

- name: Install a list of packages
apt:
name: "{{ packages }}"
vars:
packages:
- vim
- git

Exemplo 2: Atualizando todos os pacotes do sistema:

- name: Upgrade all packages to the latest version
apt:
name: "*"
state: latest

Módulo SELinux: (Esse módulo vai gerenciar a política e os modos da ferramenta SELinux). Vale lembrar que o SELinux possui três modos:
- Enforcing
- Permissive
- Disable

Exemplo 1: Desabilitando o SELinux:

- name: Disable SELinux
selinux:
state: disabled

Exemplo 2: Habilitando o SELinux:

- name: Enable SELinux
selinux:
policy: targeted
state: enforcing

Módulo systemd: (Esse módulo faz o controle dos serviços nos hosts remotos).

Exemplo 1: Reiniciando o serviço do php-fpm:

ss- name: restarting PHP service
systemd:
name: php-fpm
state: restarted
daemon_reload=yes
enable=yes

Exemplo 2: Habilitando o serviço do nginx:

- name: enable service nginx
systemd:
name: nginx
enabled: yes

Módulo ec2: (Gerencia instâncias ec2 no ambiente cloud da Amazon).

Exemplo 1: Provisionando uma instância do tipo t2.micro:

- ec2:
key_name: banco
instance_type: t2.micro
image: ami-123456
wait: yes
group: database
count: 3
vpc_subnet_id: subnet-29e63245
assign_public_ip: yes

Exemplo 2: Agora uma instância com volume ssd gp2:

- ec2:
key_name: banco
group: database
instance_type: c3.medium
image: ami-123456
wait: yes
wait_timeout: 500
volumes:
- device_name: /dev/xvda
volume_type: gp2
volume_size: 8
vpc_subnet_id: subnet-29e63245
assign_public_ip: yes
count_tag:
Name: dbserver
exact_count: 1

Módulo unarchive: (Descompacta arquivos na máquina remota).

Exemplo 1: Extraindo o arquivo comandos para outro diretório:

- name: Extract commands.tgz into /var/lib/commands
unarchive:
src: commands.tgz
dest: /var/lib/commands

Exemplo 2: Descompacta um arquivo que já está no host remoto:

- name: Unarchive a file that is already on the remote machine
unarchive:
src: /tmp/arquivo.zip
dest: /usr/local/bin
remote_src: yes
  • Conclusão

Ansible é uma tecnologia promissora, muitas empresas tem utilizado essa ferramenta e os resultados são bons. Aqui no artigo foi mostrado apenas uma introdução de uso dos módulos, mas a ferramenta vai MAIS além do que isso. Segue a documentação do Ansible para estudos: https://docs.ansible.com

E para quem, assim como eu, está interessado na certificação, segue o link da Red Hat sobre os tópicos e cursos da certificação (Red Hat Certified Specialist in Ansible Automation):
https://www.redhat.com/pt-br/services/certification/rhcoe-ansible-automation

Valeu pessoal, obrigado pela leitura e até a próxima! 😉 #VAIIII

Senior Linux Administrator @IBM

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store