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
- Removal of Wheezy and Jessie (except LTS) from mirrors
- lineinfile – Manage lines in text files
- Python - Regular expression operations