GNU/Linux >> Linux Esercitazione >  >> Linux

Ansible decommentare la riga nel file

Se hai bisogno di zero o più spazi bianchi dopo il carattere '#', dovrebbe essere sufficiente quanto segue:

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

La modifica al tuo codice originale è l'aggiunta del \s* e il .*$ nella regex.

Spiegazione:

\s - corrisponde agli spazi bianchi (spazi, tabulazioni, interruzioni di riga e feed modulo)

* - specifica che l'espressione alla sua sinistra (\s ) può avere zero o più istanze in una corrispondenza

.* - corrisponde a zero o più di qualsiasi carattere

$ - corrisponde alla fine della riga


In primo luogo, stai usando la lingua sbagliata. Con Ansible, non gli dici cosa fare, ma definisci lo stato desiderato. Quindi non dovrebbe essere Uncomment line form /etc/ssh/sshd_config , ma Ensure AuthorizedKeysFile is set to .ssh/authorized_keys .

In secondo luogo, non importa quale sia lo stato iniziale (se la riga è commentata o meno). Devi specificare una singola stringa univoca che identifichi la riga.

Con sshd_config questo è possibile come AuthorizedKeysFile direttiva ricorre una sola volta nel file. Con altri file di configurazione questo potrebbe essere più difficile.

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

Corrisponderà a qualsiasi riga contenente AuthorizedKeysFile string (non importa se è commentata o meno, o quanti spazi ci sono) e assicurati che la riga completa sia:

AuthorizedKeysFile .ssh/authorized_keys

Se la linea fosse diversa, Ansible riporterà lo stato "modificato".

Alla seconda esecuzione, Ansible troverà AuthorizedKeysFile di nuovo e scopri che la linea è già nello stato desiderato, quindi terminerà l'attività con lo stato "ok".

Un avvertimento con l'attività di cui sopra è che se una qualsiasi delle righe contiene un commento come un commento reale e intenzionale (ad esempio una spiegazione in inglese contenente la stringa AuthorizedKeysFile ), Ansible sostituirà quella riga con il valore specificato in line .


Linux
  1. Guida di Ansible:gestisci i file utilizzando Ansible

  2. Cat Line X to Line Y su un file enorme?

  3. Casella occupata Leggi file riga per riga?

  4. unix - conteggio delle colonne nel file

  5. grep senza mostrare percorso/file:riga

Come leggere i file riga per riga in Bash

Come utilizzare il modello Jinja2 in Ansible Playbook

Come leggere un file riga per riga in Bash

Comando Diff in Linux con esempi

Inventario Ansible e file di configurazione

Una breve introduzione ad Ansible Vault