2017-05-17 5 views
1

Ich kann nicht herausfinden, wie Zeichenfolgen und {{item}} in einer Bedingung verbunden werden. Ich bin mir nicht sicher, ob dies überhaupt möglich ist oderansible Join-Zeichenfolgen und Variablen in Bedingungen

hier ist meine Aufgabe Block unterstützt:

- name: enable repos 
    command: "subscription-manager repos --enable {{ item }}" 
    when: enable_repo_{{ item }} == 'yes' 
    with_items: 
    - rhel-7-server-rpms 
    - rhel-7-server-optional-rpms 
    - rhel-7-server-extras-rpms 
    - rhel-7-server-satellite-tools-6.2-rpms 
    - rhel-7-server-thirdparty-oracle-java-rpms 
    - jws-3-for-rhel-7-server-rpms 

der Fehler Ich erhalte ist:

TASK [satellite_client : enable repos] ***************************************** 
fatal: [10.187.15.31]: FAILED! => {"failed": true, "msg": "The conditional check 'enable_repo_item == 'yes'' failed. The error was: error while evaluating conditional (enable_repo_item == 'yes'): 'enable_repo_item' is undefined\n\nThe error appears to have been in '/home/marcp/git/satellite_client/tasks/main.yml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: enable repos\n^here\n"} 

PLAY RECAP ********************************************************************* 
10.187.15.31    : ok=1 changed=0 unreachable=0 failed=1 

Wie kann ich die Zeichenfolge mit verketten { {item}} oder sollte ich das anders machen?

+0

Mögliche Duplikat [Wie ansible Variablen aus einer String erstellen] (http://stackoverflow.com/questions/ 40956212/how-to-create-ansible-variable-from-string) –

+0

Ich empfehle Ihnen, Ihren Code umzuformulieren und 'enable_repos'-Liste anstelle von mehreren Variablen zu machen, dies wird Ihren Playbook-Code viel sauberer machen. –

+0

Danke. Ich habe den gleichen Rat von freenode #ansible erhalten – Marc

Antwort

1

Die Bedingung in when soll ein Jinja2-Ausdruck sein (damit Sie denken können, dass es implizit in {{ ... }} eingeschlossen ist und somit kein anderes Jinja2 öffnen kann, das innen ausdrückt).

können Sie vars Wörterbuch verwenden und den Namen der Variablen als verkettete Zeichenfolge übergeben:

when: vars['enable_repo_' + item] == 'yes' 
+1

Warten auf Konstantin zu wecken und zu beschweren, dass die Verwendung von 'vars' Wörterbuch nicht dokumentiert ist;) – techraf

+0

Probieren Sie es einfach. Der Code wird ausgeführt, aber die Aufgabe wird übersprungen, obwohl in defaults/main.yml "enable_repo_xxx: yes" gesetzt ist. Ich vermute, dass das Ergebnis der Verkettung als String genommen wird. – Marc

+0

Verwenden Sie 'debug' Modul und/oder' -vvv' zur Fehlerbehebung. – techraf

Verwandte Themen