Usando ansible en la línea de comandos para ejecutar comandos ad hoc, un comodín es muy útil, p. para ver si existe un archivo en todos los sistemas.
Yo también luché por hacer:$ ansible production -a "ls /mypath/*xxx*"
Pero envolverlo en bash -c '...' funciona:$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
Una tarea definida como esta haría el truco:
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Como escribió Larsks, la clave es usar register
, pero el código no funcionaba en mi versión actual de ansible. Así que aquí se corrige uno:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
No. El chdir=
parámetro a, por ejemplo, el command
módulo no admite comodines.
Puede lograr lo que quiera usando una variable de registro para almacenar la salida del ls
comando:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Pero esta es, francamente, una solución fea. Es mejor que utilice simplemente el nombre del directorio real. Si difiere en diferentes hosts, puede usar variables de host para configurarlo adecuadamente.