
Ich habe eine Tatsache, die eine Liste von Listen ist, zB [ [disk1, filename1], [disk2, filename2], ... [diskN,filenameN] ]
Ich muss einen Befehl im Format wie ausführen
command -x disk1,file=filename1 -x disk2,file=filename2 ... -x diskN,file=filenameN
Ich kann nicht herausfinden, wie ich die Liste reduzieren und die Option -x und Datei einfügen kann, um die Zeichenfolge zu erstellen.
Jeder Vorschlag ist willkommen. Danke, Billy
Antwort1
Angesichts der Liste
disk_file:
- [disk1, filename1]
- [disk2, filename2]
- [diskN, filenameN]
verbindendie Elemente. Beispielsweise
params: "-x {{ disk_file|map('join', ',file=')|join(' -x ') }}"
gibt
params: -x disk1,file=filename1 -x disk2,file=filename2 -x diskN,file=filenameN
Beispiel eines vollständigen Playbooks zum Testen
- hosts: localhost
vars:
disk_file:
- [disk1, filename1]
- [disk2, filename2]
- [diskN, filenameN]
params: "-x {{ disk_file|map('join', ',file=')|join(' -x ') }}"
tasks:
- debug:
var: params
- command: echo '{{ params }}'
register: out
- debug:
var: out.stdout
gibt
PLAY [localhost] *****************************************************************************
TASK [debug] *********************************************************************************
ok: [localhost] =>
params: -x disk1,file=filename1 -x disk2,file=filename2 -x diskN,file=filenameN
TASK [command] *******************************************************************************
changed: [localhost]
TASK [debug] *********************************************************************************
ok: [localhost] =>
out.stdout: -x disk1,file=filename1 -x disk2,file=filename2 -x diskN,file=filenameN
PLAY RECAP ***********************************************************************************
localhost: ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0