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.