Como usar módulos Ansible para tarefas de administração do sistema - Parte 6
Nesta Parte 6 da série Ansible, cobrimos alguns módulos Ansible nos tópicos anteriores. Agora iremos nos aprofundar e descobrir módulos adicionais que são úteis na execução de diversas tarefas de administração do sistema.
Você terá uma ideia básica de cada módulo e verá as opções disponíveis para realizar determinadas tarefas.
Nesta página:
- Gerenciando pacotes de software e repositórios no Ansible
- Gerenciando serviços usando Ansible
- Gerenciando Firewall com Ansible
- Arquivando arquivos ou pastas com Ansible
- Agendar tarefas com Ansible
- Gerencie usuários e grupos com Ansible
- Crie arquivos e diretórios com Ansible
- Gerenciando armazenamento com Ansible
- Gerenciando sistemas de arquivos com Ansible
1. Gerenciando pacotes de software e repositórios em Ansible
Ao instalar pacotes em sistemas Linux, diferentes distribuições vêm com diferentes gerenciadores de pacotes. Para distribuições RedHat, temos yum & dnf, enquanto para versões Debian, temos apt.
Ansible vem com um módulo chamado package, que elimina a necessidade de usar diferentes gerenciadores de pacotes para diferentes sistemas. Ele usa automaticamente o gerenciador de pacotes correspondente do sistema host, facilitando assim o trabalho.
Instalar pacotes de software
Por exemplo, para instalar o htop em um grupo de hosts compreendendo as distribuições Debian e RedHat, use o módulo package como mostrado no manual install_htop.yml abaixo.
---
- name: Install htop on Ubuntu and CentOS
hosts: all
tasks:
- package:
name: htop
state: installed
NOTA: Os nomes dos pacotes podem diferir de um sistema operacional para outro. Por exemplo, temos httpd em distribuições Redhat e Apache2 para sistemas Debian/Ubuntu, todos denotando o Apache servidor web. Portanto, cuidado extra deve ser tomado ao passar esses pacotes. Normalmente, é melhor usar variáveis ou instruções condicionais.
2. Gerenciando serviços usando Ansible
A seguir, temos um módulo de serviço, que é usado para gerenciar serviços em sistemas Linux. É usado para iniciar, parar ou reiniciar um serviço. Você também pode usá-lo para ativar um serviço para que, quando um sistema for inicializado, ele inicie automaticamente o serviço.
Iniciar e ativar um serviço
Por exemplo, para iniciar e ativar o servidor web Apache no RHEL 8, use o serviço conforme mostrado.
---
- name: Start and enable httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: started
enabled: yes
Interromper um serviço
Para interromper o serviço httpd, passe o atributo stopped.
---
- name: Stop httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: stopped
Reinicie um serviço
Para reiniciar o serviço httpd, passe o atributo reiniciado.
---
- name: Restart httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: restarted
3. Gerenciando Firewall com Ansible
Outra tarefa importante que os administradores de sistema realizam é o gerenciamento do firewall. Nos manuais do Ansible, isso ficou muito mais fácil com os módulos firewalld e ufw. Você pode configurar o firewall para permitir ou bloquear uma porta ou serviço ou até mesmo um endereço de origem.
Vamos começar e dar uma olhada em alguns exemplos:
Abrir/bloquear a porta 80 no firewalld
---
- name: Allow port 80
hosts: webservers
tasks:
-firewalld:
port: 80/tcp
permanent: yes
state: enabled
No manual acima, a porta 80 é permitida no firewall.
A opção permanent: yes
impõe a regra do firewall e a torna persistente durante as reinicializações. No entanto, esta regra não se aplica imediatamente. Ele só entra em vigor após uma reinicialização. Para aplicar a regra imediatamente, use a opção imediato: sim
.
Para especificar os endereços permitidos, use a instrução source:0.0.0.0/0.
- firewalld:
source: 192.168.0.0/24
zone: public
state: enabled
Para especificar um intervalo de portas permitidas, use a opção port da seguinte forma:
- firewalld:
port: 213-567/udp
permanent: yes
state: enabled
Para bloquear a porta, altere a opção de estado para desativado conforme mostrado:
-firewalld:
port: 80/tcp
permanent: yes
state: disabled
Adicionar/bloquear um serviço no firewalld
Além de adicionar/bloquear uma porta, você também pode aplicar as mesmas regras a um serviço. E é bem simples. Basta usar o módulo serviço e anexar o serviço a ser adicionado e garantir que a opção de estado esteja definida como ativado.
- firewalld:
service: https
permanent: true
state: enabled
Para bloquear o serviço defina a opção estado como desativado.
- firewalld:
service: https
permanent: true
state: disabled
4. Arquivando arquivos ou pastas com Ansible
Arquivamento refere-se à compactação de um arquivo ou pasta em um formato que seja facilmente portátil e de tamanho menor. O Ansible vem com um módulo chamado archive. Compactar um arquivo é o mais fácil possível. Tudo o que é necessário é especificar o caminho de origem do arquivo e o destino do arquivo compactado.
Compactar um diretório
Considere um manual compress.yml abaixo.
---
- hosts: webservers
tasks:
• name: Compress a folder
archive:
path: /opt/data/web
dest: /tmp/web.gz
O manual acima compacta o diretório /opt/data/web e o salva em /tmp/web.gz.
Compactar um diretório com formato
O formato de compactação padrão é .gz
, entretanto, isso pode ser especificado usando o atributo format. Experimente o próximo manual.
---
- hosts: webservers
Tasks:
- name: Create a zip archive
archive:
path: /opt/data/web
dest: /tmp/web
format: zip
O manual acima compacta o diretório /opt/data/web em /tmp/web.zip.
Descompacte um arquivo
Você também pode descompactar um arquivo compactado usando o atributo unarchive. Considere o manual abaixo.
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.gz to/opt directory on Ansible controller
unarchive:
src: /tmp/web.bz2
dest: /opt/
O manual acima descompacta o arquivo /opt/data/web.gz para /opt no controlador Ansible.
Descompacte um arquivo no nó remoto
Para especificar o sistema de origem remoto, use a opção remote_src=yes
.
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.bz2 to/opt on remote host
unarchive:
src: /tmp/web.bz2
dest: /opt/
remote_src=yes
O manual acima descompacta o arquivo /tmp/web.bz2 no nó remoto para o diretório /opt/.
5. Agende tarefas com Ansible
O módulo cron ajuda no agendamento de jobs em Ansible Playbooks.
Crie uma tarefa agendada
Considere o manual abaixo.
---
- hosts: webservers
tasks:
- name: Create a scheduled task
cron:
name: Run employee attendance
job: sh /opt/scripts/attendace.sh
month: 4
day: 5
hour: 17
minute: 00
O playbook executa o roteiro de atendimento no dia 5 de abril às 17h.
Agende um script em uma data específica
Se você deseja agendar este script para ser executado apenas se o dia 5 de abril for uma segunda-feira, use o atributo weekday: 1. 0 denota domingo e 6 denota sábado de acordo com a notação cron.
month: 4
day: 5
hour: 17
minute: 00
weekday: 1
Um asterisco (*) em qualquer um desses campos indica qualquer valor.
Execute um trabalho em uma data
Para executar o trabalho no dia 5 de abril às 17h, independentemente do dia da semana, use os parâmetros de tempo conforme mostrado.
month: 4
day: 5
hour: 17
minute: 00
weekday: *
Execute um trabalho em um dia específico de cada mês
Para executar o cron job no dia 5 de cada mês às 17h use as configurações abaixo.
month: *
day: 5
hour: 17
minute: 00
weekday: *
Execute um trabalho diariamente
Para executar o cron job diariamente às 17h, defina as configurações de horário conforme mostrado:
month: *
day: *
hour: 17
minute: 00
weekday: *
Execute um trabalho a cada 5 horas
Para executar o cron job a cada 5 horas, use o valor da etapa */5
conforme mostrado.
month: *
day: *
hour: */5
minute: *
weekday: *
6. Gerencie usuários e grupos com Ansible
Você também pode gerenciar usuários e grupos dentro dos manuais do Ansible sem esforço.
Crie um novo usuário
Para criar um novo usuário, use o módulo user conforme mostrado.
---
- hosts: webservers
tasks:
- name: Create a new user
user:
name: Jack
Você também pode adicionar opções adicionais, como UID, grupos.
- name: Create a new user
user:
name: Jack
comment: Jack Peters
uid: 1002
group: administrators
shell: /bin/bash
Remover um usuário
Para remover o usuário, use a instrução remove: yes
.
- name: Remove the user 'Jack'
user:
name: Jack
state: absent
remove: yes
Crie um novo grupo
Para criar um novo grupo, use o módulo grupo.
- name: Create a group
group:
name: developers
7. Crie arquivos e diretórios com Ansible
Para criar arquivos de diretórios, use o módulo file.
Crie um novo diretório
Por exemplo, para criar um novo diretório.
---
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/app
state: directory
Você pode adicionar outros atributos, como permissões de proprietário, grupo e arquivo.
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/web
state: directory
owner: www-data
group: www-data
mode: 0644
Além disso, você pode criar diretórios recursivamente usando a instrução recurse: yes.
---
- hosts: webservers
tasks:
- name: Create directories recursively
file:
path: /opt/web/app
state: directory
owner: www-data
group: www-data
mode: 0644
recurse: yes
Crie um arquivo
Para criar um arquivo, use a opção state: touch
.
---
- hosts: webservers
tasks:
- name: Create a new file
file:
path: /opt/web/index.html
state: touch
owner: www-data
group: www-data
mode: 0644
8. Gerenciando armazenamento com Ansible
O módulo lvg é usado para configurar volumes e grupos LVM.
Crie um grupo de volumes LVM
Considere o manual abaixo:
---
- hosts: webservers
tasks:
• name: Create lVM volume group
lvg:
vg: vg1
pvs: /dev/sda1
pesize: 32
Isso cria um grupo de volumes sobre a partição /dev/sda1
com um tamanho de extensão física de 32 MB.
Uma vez criado, use o módulo lvol para criar um volume lógico conforme mostrado
Crie um volume lógico
---
- hosts: webservers
tasks:
- name: Create lVM volume
lvol:
vg: vg1
lv: lvol1
pvs: /dev/sda1
9. Gerenciando sistemas de arquivos com Ansible
Para criar um sistema de arquivos em um dispositivo de bloco, use o módulo filesystem.
Crie um sistema de arquivos
O manual abaixo cria o tipo de sistema de arquivos xfs no volume em blocos.
---
- hosts: webservers
tasks:
- name: Create a filesystem
filesystem:
fstype: xfs
dev: /dev/vg1/lvol1
Monte um sistema de arquivos
Em seguida, você pode montar o volume em blocos usando o módulo mount conforme mostrado no manual abaixo:
---
- hosts: webservers
tasks:
- name: Mount a filesystem
mount:
fstype: xfs
src: /dev/vg1/lvol1
path: /opt/web
state: mounted
Conclusão
Isso conclui o tópico. Abordamos várias tarefas de administração do sistema que podem ser realizadas por módulos integrados específicos nos Playbooks Ansible.