Je suis très nouveau à Ansible
Est-il possible de vérifier si une chaîne existe dans un fichier en utilisant Ansible.
Je veux vérifier si un utilisateur a accès à un serveur. cela peut être fait sur le serveur en utilisant cat /etc/passwd | grep username
mais je veux qu'Ansible s'arrête si l'utilisateur n'est pas là.
J'ai essayé d'utiliser le lineinfile
mais je n'arrive pas à le faire revenir.
code
- name: find
lineinfile: dest=/etc/passwd
regexp=[user]
state=present
line="user"
Le code ci-dessus ajoute l'utilisateur au fichier s'il n'est pas là. Tout ce que je veux faire, c'est vérifier. Je ne veux en aucun cas modifier le fichier, est-ce possible
Merci.
Je serais probablement enregistrer et évaluer une variable .
Le playbook simple suivant fonctionne pour moi:
- 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"
C'est délicat. le module lineinfile est spécifiquement destiné à modifier le contenu d'un fichier, mais vous pouvez également l'utiliser pour une vérification de validation.
- name: find
lineinfile:
dest: /etc/passwd
line: "user"
check_mode: yes
register: presence
failed_when: presence.changed
check_mode
garantit qu'il ne met jamais à jour le fichier. register
enregistre la variable comme indiqué. failed_when
vous permet de définir la condition d'échec, c'est-à-dire en ajoutant l'utilisateur car il n'a pas été trouvé dans le fichier.
Il existe plusieurs itérations de cela que vous pouvez utiliser en fonction de ce que vous voulez que le comportement soit. lineinfile les documents particuliers liés à state
et regexp
devraient vous permettre de déterminer si la présence ou l'absence est un échec, etc., ou vous pouvez faire le not presence.changed
etc.
Si vous voulez échouer s'il n'y a pas d'utilisateur:
tasks:
- Shell: grep username /etc/passwd
changed_when: false
Par défaut, le module Shell
échouera si le code de sortie de la commande est différent de zéro.
Il vous donnera donc ok
si le nom d'utilisateur est là et échoue dans le cas contraire.
J'utilise changed_when: false
pour éviter l'état changed
lors de la réception.