Wenn Sie ansible auf der Befehlszeile verwenden, um Ad-hoc-Befehle auszuführen, ist ein Platzhalter sehr nützlich, z. um zu sehen, ob eine Datei auf allen Systemen vorhanden ist.
Ich habe mich auch schwer getan:$ ansible production -a "ls /mypath/*xxx*"
Aber das Verpacken in bash -c '...' funktioniert:$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
Eine so definierte Aufgabe würde den Zweck erfüllen:
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Wie Larsks geschrieben hat, ist der Schlüssel die Verwendung von register
, aber der Code funktionierte nicht auf meiner aktuellen Ansible-Version. Also hier ist eine korrigiert:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
Nein. Die chdir=
Parameter auf z. B. command
Modul unterstützt keine Platzhalter.
Sie könnten erreichen, was Sie wollen, indem Sie eine Registervariable verwenden, um die Ausgabe von ls
zu speichern Befehl:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Aber das ist, ehrlich gesagt, eine hässliche Lösung. Verwenden Sie am besten einfach den tatsächlichen Verzeichnisnamen. Wenn es auf verschiedenen Hosts unterschiedlich ist, können Sie Hostvariablen verwenden, um es entsprechend einzustellen.