Použitím ansible na příkazovém řádku k provádění ad hoc příkazů je zástupný znak velmi užitečný, např. abyste zjistili, zda soubor existuje na všech systémech.
Také jsem se snažil udělat:$ ansible production -a "ls /mypath/*xxx*"
Ale zabalit to do bash -c '...' funguje:$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
Takto definovaná úloha by stačila:
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Jak napsal Larsks, klíčem je použití register
, ale kód nefungoval na mé aktuální verzi ansible. Takže tady je jedna opravená:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
Ne. chdir=
parametr na, např. command
modul nepodporuje zástupné znaky.
Můžete dosáhnout toho, co chcete, pomocí proměnné registru k uložení výstupu ls
příkaz:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Ale to je, upřímně řečeno, ošklivé řešení. Je lepší použít skutečný název adresáře. Pokud se na různých hostitelích liší, můžete ji vhodně nastavit pomocí hostitelských proměnných.