Debido a los recientes cambios en los repositorios de Debian, tuve la necesidad de ajustar la configuración de APT en todos mis servidores de Debian 7 y 8 en desarrollo y producción. Este artículo demuestra cómo utilizar el módulo "lineinfile" de Ansible para editar archivos en múltiples sistemas al mismo tiempo utilizando un simple playbook YML.

Para hacer ediciones simples, tal como agregar y eliminar líneas, en archivos de texto, la mejor opción es el módulo lineinfile. Este módulo permite agregar, eliminar y modificar líneas seleccionando mediante expresiones regulares Python.

Veamos directamente un ejemplo de uso: necesitaba agregar la línea Acquire::Check-Valid-Until "false"; en el archivo /etc/apt/apt.conf de todos mis servidores Debian 7 y 8. Para ello, utilizar la siguiente porción de código YAML:

- lineinfile:
    path: /etc/apt/apt.conf
    line: 'Acquire::Check-Valid-Until "false";'
    backup: yes

Esta porción de código indica que se debe agregar la línea Acquire::Check-Valid-Until "false"; dentro del archivo /etc/apt/apt.conf haciendo un backup previo del mismo. Si la línea ya existe, no se agrega nuevamente.

Luego necesitaba eliminar cualquier línea que contenga la cadena -updates main dentro del archivo /etc/apt/sources.list:

- lineinfile:
    path: /etc/apt/sources.list
    regexp: '\-updates main'
    state: absent
    backup: yes

En este caso se debe utilizar la expresión regular de Python '\-updates main'. Luego se eliminan todas las líneas que contengan dicha cadena mediante el parámetro state: absent . Esto indica que cualqueir línea que contenga "-updates main" debe ser eliminada del archivo.

Por último, agrego ambas tareas en un playbook de Ansible (apt-check-valid-until.yml):

- hosts: debian7 debian8
  become: yes
  tasks:
    - name: configurar APT para adaptarse a los cambios de repositorio de Debian (3/2019)
      lineinfile:
          path: /etc/apt/apt.conf
          line: 'Acquire::Check-Valid-Until "false";'
          backup: yes

    - name: eliminar el repositorio '*-updates'
      lineinfile:
          path: /etc/apt/sources.list
          regexp: '\-updates main'
          state: absent
          backup: yes

Finalmente, ejecutar el playbook y dejar que Ansible lo haga todo por nosotros:

admin@ansible:~/ansible_playbooks$ ansible-playbook apt-check-valid-until.yml

Referencias


Tal vez pueda interesarte


Compartí este artículo