Utilizzando ansible sulla riga di comando per eseguire comandi ad hoc, un carattere jolly è molto utile, ad es. per vedere se un file esiste su tutti i sistemi.
Anch'io ho faticato a fare:$ ansible production -a "ls /mypath/*xxx*"
Ma avvolgerlo in bash -c '...' funziona:$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
Un'attività definita in questo modo farebbe il trucco:
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Come ha scritto Larsks, la chiave è usare register
, ma il codice non funzionava sulla mia attuale versione di ansible. Quindi eccone uno corretto:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
No. Il chdir=
parametro a, ad esempio, il command
il modulo non supporta i caratteri jolly.
Puoi ottenere ciò che desideri utilizzando una variabile register per memorizzare l'output di ls
comando:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Ma questa è, francamente, una brutta soluzione. Faresti meglio a usare solo il nome effettivo della directory. Se differisce su host diversi, puoi utilizzare le variabili host per impostarlo in modo appropriato.