Saltar al contenido

Ansible: Insertar línea si no existe

Mantén la atención ya que en esta sección hallarás la respuesta que buscas.

Solución:

los lineinfile módulo hace lo que se supone que debe hacer: asegura la línea como se define en line está presente en el archivo y la línea está identificada por su regexp. Así que no importa qué valor ya tenga su configuración, será anulada por su nueva line.

Si no desea anular la línea, primero debe probar el contenido y luego aplicar esa condición al lineinfile módulo. No hay un módulo para probar el contenido de un archivo, por lo que probablemente necesite ejecutar grep con un shell comando y verifique el .stdout por contenido Algo como esto (no probado):

- name: Test for line
  shell: grep -c "^couchbase.host" /database.properties || true
  register: test_grep

Y luego aplique la condición a su lineinfile tarea:

- name: add couchbase host to properties
  lineinfile:
    dest: /database.properties
    line: couchbase.host=127.0.0.1
  when: test_grep.stdout == "0"

los regexp luego se puede eliminar ya que ya se aseguró de que la línea no exista para que nunca coincida.

Pero tal vez estás haciendo las cosas al revés. ¿De dónde viene esa línea en el archivo? Cuando administra su sistema con Ansible, no debe haber otros mecanismos que interfieran con los mismos archivos de configuración. Tal vez puedas solucionar esto agregando un default valor a su papel?

Esto es posible simplemente usando lineinfile y check_mode:

- name: Check if couchbase.host is already defined
  lineinfile:
    state: absent
    path: "/database.properties"
    regexp: "^couchbase.host="
  check_mode: true
  changed_when: false # This just makes things look prettier in the logs
  register: check

- name: Define couchbase.host if undefined
  lineinfile:
    state: present
    path: "/database.properties"
    line: "couchbase.host=127.0.0.1"
  when: check.found == 0

Esta es la única forma en que pude hacer que esto funcione.

- name: checking for host
  shell: cat /database.properties | grep couchbase.host | wc -l
  register: test_grep

- debug: msg="test_grep.stdout"

- name: adding license server
  lineinfile: dest=/database.properties line="couchbase.host=127.0.0.1"
  when: test_grep.stdout == "0"

Si haces scroll puedes encontrar los comentarios de otros desarrolladores, tú asimismo puedes insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *