Exemplos de Ansible para administração de sistemas

Exemplos de ansible para gerir sistemas. Para modificar a configuração do OpenSSH-Server com ansible, primeiro é preciso criar um ficheiro playbooks.yml no diretório onde são armazenados os ficheiros ansible. O ficheiro playbooks.yml contém várias tarefas para serem executadas através do ansible:

Atualizar a configuração do servidor

Este código de ansible realiza várias tarefas:

  • name: Editando o ficheiro sshd_config: define o nome da tarefa como “Editando o ficheiro sshd_config”.
  • become: true: indica que a tarefa deve ser executada com privilégios de superutilizador.
  • lineinfile: indica que o módulo lineinfile do ansible será utilizado, o qual permite editar linhas específicas de um ficheiro.
  • dest: /etc/ssh/sshd_config: especifica o ficheiro que será editado, neste caso o ficheiro de configuração do OpenSSH (/etc/ssh/sshd_config).
  • regexp: "{{ item }}": especifica uma expressão regular que será utilizada para procurar a linha a ser editada no ficheiro. A variável item será substituída por cada um dos elementos da lista with_items.
  • line: "{{ item }} {{ value }}": especifica a nova linha que será escrita no ficheiro. A variável item será substituída por cada um dos elementos da lista with_items e a variável value será substituída pelo valor associado a esse elemento.
  • with_items: especifica uma lista de pares chave-valor que serão processados num ciclo. Neste caso, a lista contém dois elementos: PermitRootLogin: no e PasswordAuthentication: no.

Este código procura as linhas PermitRootLogine PasswordAuthenticationno ficheiro /etc/ssh/sshd_confige, se forem encontradas, modifica-as para que tenham o valor no. Se não forem encontradas, são adicionadas ao final do ficheiro. A tarefa é executada com privilégios de superutilizador e, portanto, é necessário fornecer a palavra-passe de superutilizador ou utilizar uma chave privada para autenticar-se.

  - name: Editing_the_sshd_config_file
    become: true
    lineinfile: dest=/etc/ssh/sshd_config regexp="{{ item }}" line="{{ item }} {{ value }}"
    with_items: 
      - PermitRootLogin: no
      - PasswordAuthentication: no

Reiniciar o servidor SSH

Este código de ansible realiza uma tarefa que tem como objetivo reiniciar o serviço de SSH (Secure Shell) e habilitá-lo para que se execute automaticamente no arranque do sistema. A tarefa é realizada com privilégios de superutilizador (become: true).

Para levar a cabo a tarefa, é utilizado o módulo service do ansible, que permite gerir serviços do sistema. Os parâmetros da tarefa são:

  • name: Rebooting_ssh_service: define o nome da tarefa como “Reiniciando o serviço de ssh”.
  • name=ssh: especifica o nome do serviço que será gerido. Neste caso, trata-se do serviço de SSH.
  • state=restarted: indica que o serviço deve ser reiniciado.
  • enabled=yes: indica que o serviço deve ser habilitado para que se execute automaticamente no arranque do sistema.

Esta tarefa reinicia o serviço de SSH e habilita o serviço para que se execute automaticamente no arranque do sistema. É executada com privilégios de superutilizador e, portanto, é necessário fornecer a palavra-passe de superutilizador ou utilizar uma chave privada para autenticar-se.

  - name: Rebooting_ssh_service
    become: true  
    service : name=ssh state=restarted enabled=yes

Depois de guardarmos o ficheiro playbooks.yml, podemos executá-lo com o comando ansible-playbook. Isto diz ao ansible para executar todas as tarefas contidas nesse ficheiro para configurar e reiniciar o OpenSSH-Server.

Modificar a palavra-passe de um utilizador em Linux

Este código de ansible realiza uma tarefa que tem como objetivo alterar a palavra-passe do utilizador “admin”. A tarefa é realizada utilizando o módulo user do ansible, que permite gerir utilizadores do sistema. Os parâmetros da tarefa são:

  • name: Change_admin_user_password: define o nome da tarefa como “Alterar a palavra-passe do utilizador admin”.
  • name: admin: especifica o nome do utilizador cuja palavra-passe será alterada.
  • update_password: alway: indica que a palavra-passe do utilizador deve ser sempre atualizada. Se a opção update_password não for especificada, o ansible não alterará a palavra-passe se já estiver definida.
  • password: "{{ 'password123' | password_hash('sha512') }}" especifica a nova palavra-passe do utilizador. Neste caso, é utilizado o filtro password_hash do ansible para gerar um hash da palavra-passe utilizando o algoritmo SHA-512. Isto é necessário já que o ansible armazena as palavras-passe dos utilizadores como hashes em vez de em texto claro, para evitar que sejam lidas por pessoas não autorizadas.

Esta tarefa altera a palavra-passe do utilizador “admin” para a palavra-passe “password123”. É utilizado o filtro password_hash para gerar um hash da palavra-passe utilizando o algoritmo SHA-512 e é estabelecida a opção update_password: always para forçar o ansible a atualizar sempre a palavra-passe.

Exemplo:

- name: Change_admin_user_password  
  user: 
    name: admin   # Nombre de usuario a cambiar su password. 
    update_password: always     # Esta opción forzará a Ansible para actualizar siempre la contraseña del usuario en cuestión.  		      # La longitud debe ser al menos 8 caracteres.
    password: "{{ 'password123' | password_hash('sha512') }}"  # Esta línea es para establecer una contraseña segura.

Criar novos utilizadores com o ansible

Este código de ansible realiza uma tarefa que tem como objetivo criar um novo utilizador no sistema chamado “Bob”. A tarefa é realizada utilizando o módulo user do ansible, que permite gerir utilizadores do sistema. Os parâmetros da tarefa são:

  • name: Create_a_new_user_named_Bob: define o nome da tarefa como “Criar um novo utilizador chamado ‘Bob'”.
  • name: Bob: especifica o nome do novo utilizador que será criado.
  • password: "{{ 'password123' | password_hash('sha512') }}": especifica a palavra-passe do novo utilizador. Neste caso, é utilizado o filtro password_hashdo ansible para gerar um hash da palavra-passe utilizando o algoritmo SHA-512. Isto é necessário já que o ansible armazena as palavras-passe dos utilizadores como hashes em vez de em texto claro, para evitar que sejam lidas por pessoas não autorizadas.

Exemplo:

- name: Create_a_new_user_named_Bob  		   # Nombre de la tarea en nuestro playbook.
  user:   			# Este es el módulo que vamos a utilizar para creación de usuarios.  
    name: Bob   		# Nombre del usuario que vamos a crear.
    password: "{{ 'password123' | password_hash('sha512') }}"  # Esta línea es para establecer una contraseña segura.

Resumindo, esta tarefa cria um novo utilizador chamado “Bob” com a palavra-passe “password123”. É utilizado o filtro password_hash para gerar um hash da palavra-passe utilizando o algoritmo SHA-512. Se o utilizador “Bob” já existir, o ansible não realizará nenhuma ação.

Eliminar utilizadores em Linux com o ansible

Este código de ansible realiza uma tarefa que tem como objetivo eliminar o utilizador “Bob” do sistema. A tarefa é realizada utilizando o módulo user do ansible, que permite gerir utilizadores do sistema. Os parâmetros da tarefa são:

  • name: Delete_Bob_user: define o nome da tarefa como “Eliminar o utilizador ‘Bob'”.
  • name: Bob: especifica o nome do utilizador que será eliminado.
  • state: absent: indica que o utilizador deve ser eliminado. Se a opção statenão for especificada, o ansible assume que se quer criar o utilizador.

Esta tarefa elimina o utilizador “Bob” do sistema. Se o utilizador “Bob” não existir, o ansible não realizará nenhuma ação. É importante ter em conta que esta tarefa não elimina os ficheiros ou diretórios pertencentes ao utilizador “Bob”. Se se querem eliminar também estes elementos, é necessário utilizar outras tarefas ou módulos do ansible.

Exemplo:

- name: Delete_Bob_user 		# Nombre de la tarea en nuestro playbook.
  user:   			# Este es el módulo que vamos a utilizar para eliminar usuarios.  
    name: Bob     # Nombre del usuario que vamos a eliminar.
    state: absent  # Esta opción indica al módulo de Ansible que queremos eliminar al usuario en cuestión.

Atualizar PHP

Para atualizar o PHP para a versão 8.2 utilizando o ansible, podes utilizar o seguinte código:

---
# Este es un ejemplo de cómo utilizar Ansible para actualizar PHP
# a la versión 8.2 si está instalada una versión inferior.

- name: php_version_check
  command: php -v
  register: result

- name: upgrade_php_to_8.2
  become: true
  apt:
    name: "{{ packages }}"
    state: latest
  vars:
    packages:
      - php8.2
  when: result.stdout | version_compare('8.2', '<')
  • Na primeira tarefa, o comando php -v é executado para obter informações sobre a versão do PHP instalada no sistema. A saída do comando é armazenada na variável result.
  • Na segunda tarefa, o módulo aptdo ansible é utilizado para atualizar os pacotes do PHP para a versão mais recente disponível. O módulo aptserá executado com privilégios de superusuário (become: true) e o pacote php8.2 (que é a versão 8.2 do PHP) será instalado.
  • A opção when é usada para especificar que a tarefa de atualização do PHP só será executada se a versão do PHP instalada for anterior à versão 8.2. Para isso, é usado o filtro version_comparedo ansible, que compara a versão do PHP obtida com o comando php -v (armazenada na variável result) com a versão 8.2 e retorna truese for anterior.

É importante lembrar que este código assume que o pacote php8.2 está disponível no repositório de pacotes utilizado pelo sistema e que o pacote atual do php foi instalado através de um pacote de distribuição (como aptou yum). Se isso não for o caso, pode ser necessário fazer algumas alterações no código para adaptá-lo ao seu ambiente.

Atualizar Python

Para atualizar o Python para a versão 3.11 usando ansible, você pode usar o seguinte código:

---
# Este es un ejemplo de cómo utilizar ansible para actualizar Python
# a la versión 3.11 si está instalada una versión inferior.

- name: python_version_check
  command: python3 --version
  register: result

- name: upgrade_python_to_3.11
  become: true
  package:
    name: "{{ packages }}"
    state: latest
  vars:
    packages:
      - python3.11
  when: result.stdout | version_compare('3.11', '<')

Explicación do código:

  • Na primeira tarefa, o comando python3 –version é executado para obter informações sobre a versão do Python 3 instalada no sistema. A saída do comando é armazenada na variável result.
  • Na segunda tarefa, o módulo package do ansible é usado para atualizar o pacote do Python para a versão mais recente disponível. O módulo package será executado com privilégios de superusuário (become: true) e o pacote python3.11 (que é a versão 3.11 do Python) será instalado.
  • A opção when é usada para especificar que a tarefa de atualização do Python só será executada se a versão do Python instalada for anterior à versão 3.11. Para isso, o filtro version_compare do ansible é usado, comparando a versão do Python obtida com o comando python3 –version (armazenada na variável result) com a versão 3.11 e retornando true se for anterior.

Assim como no código acima para o PHP, é importante lembrar que este código assume que o pacote python3.11 está dispon

Explicación del código:

  • En la primera tarea, se ejecuta el comando python3 --version para obtener información sobre la versión de Python 3 instalada en el sistema. La salida del comando se almacena en la variable result.
  • En la segunda tarea, se utiliza el módulo package de ansible para actualizar el paquete de Python a la última versión disponible. El módulo package se ejecutará con privilegios de superusuario (become: true) y se instalará el paquete python3.11 (que es la versión 3.11 de Python).
  • La opción when se utiliza para especificar que la tarea de actualización de Python solo se ejecutará si la versión de Python instalada es anterior a la versión 3.11. Para ello, se utiliza el filtro version_compare de ansible, que compara la versión de Python obtenida con el comando python3 --version (almacenada en la variable result) con la versión 3.11 y devuelve true si es anterior.

Do mesmo modo que no código acima, lembre-se de que este código supõe que o pacote python3.11 está disponível no repositório de pacotes utilizado pelo sistema e que o pacote python3 atual foi instalado através de um pacote de distribuição (como apt ou yum). Se isso não for o caso, é possível que seja necessário fazer algumas alterações no código para adaptá-lo ao seu ambiente.

Deixe uma resposta