Estoy tratando de mantener varios paquetes usando ansible-playbook pero no funciona conmigo.
Usando el código a continuación, contiene el primer paquete, luego lo suelta y luego contiene el segundo paquete
Aquí está mi código
- name: Prevent packages from being upgraded dpkg_selections: name: "{{ item }}" selection: hold with_items: - postgresql - docker Aquí está la salida del lado del servidor mientras se ejecuta el código
la primera línea antes de ejecutar la segunda línea es la salida cuando se retuvo el primer paquete la tercera línea cuando se retuvo el segundo paquete y se detuvo
No entiendo por qué el comportamiento es así? y ¿cómo puedo tener varios paquetes a la vez usando ansible?
NOTA: Ya seguí las instrucciones de Anible doc https://docs.ansible.com/ansible/latest/collections/ansible/builtin/dpkg_selections_module.html Gracias de antemano
Ya por razones de rendimiento y recursos, proporcionar los paquetes como una lista podría ser mejor.
- name: Prevent packages from being upgraded dpkg_selections: name: ['postgresql', 'docker'] selection: holdSin embargo, su prueba informó
dpkg: error: unexpected data after package and selection Por lo tanto, es posible que el módulo no pueda manejar listas, así que eché un vistazo a la fuente dpkg_selections.py . Parece ser un envoltorio de alguna manera simple.
module.run_command([dpkg, '--set-selections'], data="%s %s" % (name, selection), check_rc=True) que solo proporcionan información para un módulo. También asumo que el módulo debería funcionar with_items , pero parece que no es el caso debido a su pregunta.
De acuerdo con las páginas del manual, el comando dpkg en sí mismo parece ser capaz de manejar una lista de paquetes, pero se proporciona como un archivo de valores separados por caracteres.
dpkg --set-selections < /tmp/pkg_list con delimitador en el formato
postgresql hold docker holdUna solución sencilla podría ayudar en su caso.
- name: Prevent packages from being upgraded shell: cmd: | dpkg --set-selections << EOF postgresql hold docker hold EOF warn: false register: resultEs posible que deba implementar algunos errores y manejo de estado por sí mismo, es decir
changed_when: result.rc ... failed_when: result.rc ...Gracias a
Qué pasa:
- name: Prevent packages from being upgraded dpkg_selections: name: "{{ item }}" selection: hold loop: - postgresql - dockerEn mi caso, la salida del lado del servidor después de la ejecución fue la lista completa de paquetes.