Ejemplos de Ansible para administrar sistemas

Ejemplos de Ansible para administrar sistemas. Para modificar la configuración de OpenSSH-Server con Ansible, primero hay que crear un archivo playbooks.yml en el directorio donde se almacenan los archivos ansible. El archivo playbooks.yml contiene varias tareas para ejecutarse a través de Ansible:

Actualizar la configuración del servidor

Este código de ansible realiza varias tareas:

  • name: Editando el fichero sshd_config: establece el nombre de la tarea como “Editando el fichero sshd_config”.
  • become: true: indica que la tarea se debe ejecutar con privilegios de superusuario.
  • lineinfile:: indica que se va a utilizar el módulo lineinfile de ansible, que permite editar líneas específicas de un fichero.
  • dest: /etc/ssh/sshd_config: especifica el fichero que se va a editar, en este caso el fichero de configuración de OpenSSH (/etc/ssh/sshd_config).
  • regexp: "{{ item }}": especifica una expresión regular que se utilizará para buscar la línea a editar en el fichero. La variable item se sustituirá por cada uno de los elementos de la lista with_items.
  • line: "{{ item }} {{ value }}": especifica la nueva línea que se escribirá en el fichero. La variable item se sustituirá por cada uno de los elementos de la lista with_items y la variable value se sustituirá por el valor asociado a ese elemento.
  • with_items:: especifica una lista de pares clave-valor que se procesarán en un bucle. En este caso, la lista contiene dos elementos: PermitRootLogin: no y PasswordAuthentication: no.

Este código busca las líneas PermitRootLogin y PasswordAuthentication en el fichero /etc/ssh/sshd_config y, si se encuentran, las modifica para que tengan el valor no. Si no se encuentran, se añaden al final del fichero. La tarea se ejecuta con privilegios de superusuario y, por tanto, es necesario proporcionar la contraseña de superusuario o utilizar una clave privada para autenticarse.

  - 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 el servidor SSH

Este código de ansible realiza una tarea que tiene como objetivo reiniciar el servicio de SSH (Secure Shell) y habilitarlo para que se ejecute automáticamente en el arranque del sistema. La tarea se realiza con privilegios de superusuario (become: true).

Para llevar a cabo la tarea, se utiliza el módulo service de ansible, que permite gestionar servicios del sistema. Los parámetros de la tarea son:

  • name: Rebooting_ssh_service: establece el nombre de la tarea como “Reiniciando el servicio de ssh”.
  • name: ssh: especifica el nombre del servicio que se va a gestionar. En este caso, se trata del servicio de SSH.
  • state: restarted: indica que se debe reiniciar el servicio.
  • enabled: yes: indica que se debe habilitar el servicio para que se ejecute automáticamente en el arranque del sistema.

Esta tarea reinicia el servicio de SSH y habilita el servicio para que se ejecute automáticamente en el arranque del sistema. Se ejecuta con privilegios de superusuario y, por tanto, es necesario proporcionar la contraseña de superusuario o utilizar una clave privada para autenticarse.

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

Una vez que hayamos guardado el archivo playbooks.yml, podemos ejecutarlo con el comando ansible-playbook. Esto le dice a Ansible que ejecute todas las tareas contenidas en ese archivo para configurar y reiniciar OpenSSH-Server.

Modificar la contraseña de un usuario en Linux

Este código de ansible realiza una tarea que tiene como objetivo cambiar la contraseña del usuario “admin”. La tarea se realiza utilizando el módulo user de ansible, que permite gestionar usuarios del sistema. Los parámetros de la tarea son:

  • name: Change_admin_user_password: establece el nombre de la tarea como “Cambiar la password del usuario admin”.
  • name: admin: especifica el nombre del usuario cuyo password se va a cambiar.
  • update_password: always: indica que se debe actualizar siempre la contraseña del usuario. Si la opción update_password no se especifica, ansible no cambiará la contraseña si ya está establecida.
  • password: "{{ 'password123' | password_hash('sha512') }}": especifica la nueva contraseña del usuario. En este caso, se utiliza el filtro password_hash de ansible para generar un hash de la contraseña utilizando el algoritmo SHA-512. Esto es necesario ya que ansible almacena las contraseñas de los usuarios como hashes en lugar de en texto claro, para evitar que sean leídas por personas no autorizadas.

Esta tarea cambia la contraseña del usuario “admin” por la contraseña “password123”. Se utiliza el filtro password_hash para generar un hash de la contraseña utilizando el algoritmo SHA-512 y se establece la opción update_password: always para forzar a ansible a actualizar siempre la contraseña.

Ejemplo:

- 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.

Crear usuarios nuevos con Ansible

Este código de ansible realiza una tarea que tiene como objetivo crear un nuevo usuario en el sistema llamado “Bob”. La tarea se realiza utilizando el módulo user de ansible, que permite gestionar usuarios del sistema. Los parámetros de la tarea son:

  • name: Create_a_new_user_named_Bob: establece el nombre de la tarea como “Crear un nuevo usuario llamado ‘Bob'”.
  • name: Bob: especifica el nombre del nuevo usuario que se va a crear.
  • password: "{{ 'password123' | password_hash('sha512') }}": especifica la contraseña del nuevo usuario. En este caso, se utiliza el filtro password_hash de ansible para generar un hash de la contraseña utilizando el algoritmo SHA-512. Esto es necesario ya que ansible almacena las contraseñas de los usuarios como hashes en lugar de en texto claro, para evitar que sean leídas por personas no autorizadas.

Ejemplo:

- 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.

Resumiendo, esta tarea crea un nuevo usuario llamado “Bob” con la contraseña “password123”. Se utiliza el filtro password_hash para generar un hash de la contraseña utilizando el algoritmo SHA-512. Si el usuario “Bob” ya existe, ansible no realizará ninguna acción.

Eliminar usuarios en Linux con Ansible

Este código de ansible realiza una tarea que tiene como objetivo eliminar al usuario “Bob” del sistema. La tarea se realiza utilizando el módulo user de ansible, que permite gestionar usuarios del sistema. Los parámetros de la tarea son:

  • name: Delete_Bob_user: establece el nombre de la tarea como “Eliminar al usuario ‘Bob'”.
  • name: Bob: especifica el nombre del usuario que se va a eliminar.
  • state: absent: indica que se debe eliminar al usuario. Si la opción state no se especifica, ansible asume que se quiere crear el usuario.

Esta tarea elimina al usuario “Bob” del sistema. Si el usuario “Bob” no existe, ansible no realizará ninguna acción. Es importante tener en cuenta que esta tarea no elimina los archivos o directorios propiedad del usuario “Bob”. Si se quieren eliminar también estos elementos, es necesario utilizar otras tareas o módulos de ansible.

Ejemplo:

- 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.

Actualizar PHP

Para actualizar PHP a la versión 8.2 utilizando Ansible, puedes utilizar el siguiente 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', '<')
  • En la primera tarea, se ejecuta el comando php -v para obtener información sobre la versión de PHP instalada en el sistema. La salida del comando se almacena en la variable result.
  • En la segunda tarea, se utiliza el módulo apt de ansible para actualizar los paquetes de PHP a la última versión disponible. El módulo apt se ejecutará con privilegios de superusuario (become: true) y se instalará el paquete php8.2 (que es la versión 8.2 de PHP).
  • La opción when se utiliza para especificar que la tarea de actualización de PHP solo se ejecutará si la versión de PHP instalada es anterior a la versión 8.2. Para ello, se utiliza el filtro version_compare de ansible, que compara la versión de PHP obtenida con el comando php -v (almacenada en la variable result) con la versión 8.2 y devuelve true si es anterior.

Es importante tener en cuenta que este código asume que el paquete php8.2 está disponible en el repositorio de paquetes utilizado por el sistema y que el paquete php actual está instalado a través de un paquete de distribución (como apt o yum). Si esto no es así, es posible que sea necesario realizar algunos cambios en el código para adaptarlo a tu entorno.

Actualizar Python

Para actualizar Python a la versión 3.11 utilizando ansible, puedes utilizar el siguiente 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 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.

Al igual que en el codigo de arriba para PHP, recuerda que importante tener en cuenta que este código asume que el paquete python3.11 está disponible en el repositorio de paquetes utilizado por el sistema y que el paquete python3 actual está instalado a través de un paquete de distribución (como apt o yum). Si esto no es así, es posible que sea necesario realizar algunos cambios en el código para adaptarlo a tu entorno.

Deja una respuesta