Pesquisa de site

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:
  1. Gerenciando pacotes de software e repositórios no Ansible
  2. Gerenciando serviços usando Ansible
  3. Gerenciando Firewall com Ansible
  4. Arquivando arquivos ou pastas com Ansible
  5. Agendar tarefas com Ansible
  6. Gerencie usuários e grupos com Ansible
  7. Crie arquivos e diretórios com Ansible
  8. Gerenciando armazenamento com Ansible
  9. 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.