Te recomendamos que pruebes esta respuesta en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
Es complicado. el módulo lineinfile está diseñado específicamente para modificar el contenido de un archivo, pero también puede usarlo para una verificación de validación.
- name: find
lineinfile:
dest: /etc/passwd
line: "user"
check_mode: yes
register: presence
failed_when: presence.changed
check_mode
asegura que nunca actualiza el archivo.
register
guarda la variable como se indica.
failed_when
le permite establecer la condición de falla, es decir, agregando el usuario porque no se encontró en el archivo.
Hay múltiples iteraciones de esto que puede usar en función de lo que desea que sea el comportamiento. documentos de lineinfile en particular relacionados con state
y regexp
debería permitirle determinar si la presencia o ausencia es o no una falla, etc., o puede hacer lo mismo not presence.changed
etc.
Probablemente registraría y evaluaría una variable.
El siguiente libro de jugadas simple funciona para mí:
- hosts: localhost
tasks:
- name: read the passwd file
shell: cat /etc/passwd
register: user_accts
- name: a task that only happens if the user exists
when: user_accts.stdout.find('hillsy') != -1
debug: msg="user hillsy exists"
Si quieres fallar si no hay ningún usuario:
tasks:
- shell: grep username /etc/passwd
changed_when: false
Por defecto shell
el módulo fallará si el código de salida del comando no es cero.
Entonces te dará ok
si el nombre de usuario está allí y falla en caso contrario.
yo suelo changed_when: false
para prevenir changed
estado al grepping.
Si piensas que ha sido de provecho este artículo, sería de mucha ayuda si lo compartes con el resto seniors así nos ayudas a extender esta información.