2017-09-11 2 views
0

Wie mache ich die Echo-Anweisung hier korrekt? Wenn ich Ansible debug Modul verwenden, ist in der Lage, den Wert, aber nicht im Shell-Modul korrekt zu erhalten.Wie benutzt man eine andere Variable in Ansible Variable?

cat /data/info.txt 
a:8080,b:8081,c:8082 
cat /data/num 
0 
- hosts: dev 
    remote_user: root 
    gather_facts: false 
    tasks: 
    - name: get dir path and port info 
     shell: cat /data/info.txt 
     register: info 

    - name: get the last num 
     shell: cat /data/num 
     register: num 

    - name: test 
     shell: echo {{ info.stdout.split(',')[{{ num.stdout }}].split(':')[0] }} >>/tmp/test.txt 
+0

Entschuldigung, ich habe das Dokument gelesen, aber ich habe dieses Problem immer noch nicht gelöst, können Sie mir helfen? – zhangxd

Antwort

0

Sobald Sie mit {{ einen Jinja2 Ausdruck öffnen, sollten Sie bare Variablen verwenden, bis es mit }} beendet. Zitieren der FAQ:

Eine andere Regel ist "Schnurrbärte nicht stapeln". Wir sehen oft diese:

{{ somevar_{{other_var}} }} 

Die oben NICHT


FUNKTIONIERT Was Sie vielleicht gesucht werden (weil Sie noch nicht Ihre erwartete Ergebnis enthalten) ist:

shell: echo {{ info.stdout.split(',')[ num.stdout|int ].split(':')[0] }} >>/tmp/test.txt 

Zusätzlich zum Stapeln der Bärte müssen Sie auf Typen achten und den zweiten Wert (von /data/num abgerufen) in Ganzzahl umwandeln.

+0

danke, es funktioniert – zhangxd

+0

Das Wichtigste ist, die Standardausgabe in int zu konvertieren. – zhangxd

Verwandte Themen