GNU/Linux >> Tutoriels Linux >  >> Linux

Ansible décommenter la ligne dans le fichier

Si vous avez besoin de zéro ou plusieurs espaces blancs après le caractère '#', ce qui suit devrait suffire :

- name: Uncomment line from /etc/ssh/sshd_config
    lineinfile:
      dest: /etc/ssh/sshd_config
      regexp: '^#\s*AuthorizedKeysFile.*$'
      line: 'AuthorizedKeysFile    .ssh/authorized_keys'

La modification de votre code d'origine est l'ajout du \s* et le .*$ dans la regex.

Explication :

\s - correspond aux espaces blancs (espaces, tabulations, sauts de ligne et sauts de page)

* - spécifie que l'expression à sa gauche (\s ) peut avoir zéro ou plusieurs instances dans une correspondance

.* - correspond à zéro ou plus de n'importe quel caractère

$ - correspond à la fin de la ligne


Premièrement, vous utilisez la mauvaise langue. Avec Ansible, vous ne lui dites pas quoi faire, mais définissez l'état souhaité. Il ne devrait donc pas être Uncomment line form /etc/ssh/sshd_config , mais Ensure AuthorizedKeysFile is set to .ssh/authorized_keys .

Deuxièmement, peu importe l'état initial (si la ligne est commentée ou non). Vous devez spécifier une seule chaîne unique qui identifie la ligne.

Avec sshd_config c'est possible comme AuthorizedKeysFile La directive n'apparaît qu'une seule fois dans le fichier. Avec d'autres fichiers de configuration, cela peut être plus difficile.

- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: AuthorizedKeysFile
    line: 'AuthorizedKeysFile    .ssh/authorized_keys'

Il correspondra à toute ligne contenant AuthorizedKeysFile chaîne (peu importe si elle est commentée ou non, ou combien d'espaces y a-t-il) et assurez-vous que la ligne complète est :

AuthorizedKeysFile .ssh/authorized_keys

Si la ligne était différente, Ansible signalera l'état "modifié".

Lors de la deuxième exécution, Ansible trouvera le AuthorizedKeysFile à nouveau et découvrez que la ligne est déjà dans l'état souhaité, elle terminera donc la tâche avec l'état "ok".

Une mise en garde avec la tâche ci-dessus est que si l'une des lignes contient un commentaire tel qu'un commentaire réel et intentionnel (par exemple une explication en anglais contenant la chaîne AuthorizedKeysFile ), Ansible remplacera cette ligne par la valeur spécifiée dans line .


Linux
  1. Boîte occupée lire le fichier ligne par ligne ?

  2. Dépendance manquante dans Pip3 ?

  3. VIM :comment aller à la ligne exacte sur Ubuntu

  4. unix - nombre de colonnes dans le fichier

  5. ajouter une ligne à un fichier UNIQUEMENT s'il n'est pas déjà dans le fichier

Comment lire des fichiers ligne par ligne dans Bash

Comment utiliser le modèle Jinja2 dans Ansible Playbook

Comment lire un fichier ligne par ligne dans Bash

Commande Diff sous Linux avec exemples

Fichiers d'inventaire et de configuration Ansible

Une brève introduction à Ansible Vault