GNU/Linux >> Tutoriales Linux >  >> Linux

Línea de comentario de Ansible en el archivo

Si necesita cero o más espacios en blanco después del carácter '#', lo siguiente debería ser suficiente:

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

La modificación a su código original es la adición del \s* y el .*$ en la expresión regular.

Explicación:

\s - coincide con espacios en blanco (espacios, tabulaciones, saltos de línea y fuentes de formulario)

* - especifica que la expresión a su izquierda (\s ) puede tener cero o más instancias en una coincidencia

.* - coincide con cero o más de cualquier carácter

$ - coincide con el final de la línea


En primer lugar, estás usando el idioma equivocado. Con Ansible, no le dice qué hacer, sino que define el estado deseado. Entonces no debería ser Uncomment line form /etc/ssh/sshd_config , pero Ensure AuthorizedKeysFile is set to .ssh/authorized_keys .

En segundo lugar, no importa cuál sea el estado inicial (si la línea está comentada o no). Debe especificar una cadena única y única que identifique la línea.

Con sshd_config esto es posible como el AuthorizedKeysFile directiva se produce sólo una vez en el archivo. Con otros archivos de configuración esto puede ser más difícil.

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

Coincidirá con cualquier línea que contenga AuthorizedKeysFile cadena (sin importar si está comentada o no, o cuántos espacios hay) y asegúrese de que la línea completa sea:

AuthorizedKeysFile .ssh/authorized_keys

Si la línea fuera diferente, Ansible informará el estado "cambiado".

En la segunda ejecución, Ansible encontrará el AuthorizedKeysFile nuevamente y descubra que la línea ya está en el estado deseado, por lo que finalizará la tarea con el estado "ok".

Una advertencia con la tarea anterior es que si alguna de las líneas contiene un comentario, como un comentario real e intencional (por ejemplo, una explicación en inglés que contenga la cadena AuthorizedKeysFile ), Ansible reemplazará esa línea con el valor especificado en line .


Linux
  1. Buzón ocupado ¿Leer archivo línea por línea?

  2. Pip3 ¿Dependencia faltante?

  3. VIM:cómo ir a la línea exacta en Ubuntu

  4. agregue una línea a un archivo SOLAMENTE si aún no está en el archivo

  5. unix:divide un archivo .gz enorme por línea

Cómo leer archivos línea por línea en Bash

Cómo usar la plantilla Jinja2 en Ansible Playbook

Cómo leer un archivo línea por línea en Bash

Comando Diff en Linux con ejemplos

Archivos de inventario y configuración de Ansible

Una breve introducción a Ansible Vault