2016-04-26 4 views
3

Ist es möglich, nur Modulargumente einzubeziehen, wenn eine bestimmte Bedingung gültig ist, ohne das Abspielen zu duplizieren?Ansible bedingte Modulargumente

Beispiel:

Ich habe ein Spiel, das wie folgt aussieht:

- name: Start Container 
    docker: 
     name: "{{containerName}}" 
     state: reloaded 
     command: "java -jar {{containerImage}}-{{containerJarVersion}}.jar" 

ich den Wert des Befehlsargument ändern möchten, je nachdem ob eine Bedingung falsch ist wahr? Momentan muss ich das gesamte Spiel duplizieren und es in einen Zustand bringen, der fürchterlich ist, da nur ein Argument anders ist.

Aktuelle Lösung:

- name: Start Container Debug 
    docker: 
     name: "{{containerName}}" 
     state: reloaded 
     command: "java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address={{debugPort}} -jar {{containerImage}}-{{containerJarVersion}}.jar" 
    when: ({{enableDebug}} == true) 

    - name: Start Container 
    docker: 
     name: "{{containerName}}" 
     state: reloaded 
     command: "java -jar {{containerImage}}-{{containerJarVersion}}.jar" 
    when: ({{enableDebug}} == false) 
+0

Sorry, ich könnte dies falsch bekommen .. Was ist der Unterschied zwischen den beiden Aufgaben? Sie sehen für mich genauso aus. – shaps

+0

Entschuldigung Kopieren und Einfügen Fehler, aktualisiert das Codebeispiel! – Ash

Antwort

1

Ich denke, Sie werden immer noch eine bedingte verwenden müssen (Sie möchten verschiedene Dinge auf der Grundlage einer Bedingung am Ende .. :).

Das einzige, was ich denken kann ist, dass Sie Ihre Aufgabe zweimal vermeiden schreiben (was all diese nervigen skipped), könnten Sie Folgendes tun:

 # file: play.yml 

    - include_vars: debug_vars.yml 
     when: enableDebug == True 

    - include_vars: prod_vars.yml 
     when: enableDebug == False 


    - name: Start Container 
     docker: 
      name: "{{containerName}}" 
      state: reloaded 
      command: "{{ start_container_command }}" 



     # file: debug_vars.yml 
     start_container_command: "java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address={{debugPort}} -jar {{containerImage}}-{{containerJarVersion}}.jar" 

     # file: prod_vars.yml 
     start_container_command: "java -jar {{containerImage}}-{{containerJarVersion}}.jar" 
0

Sie können es wie folgt verwenden:

- name: Start Container Debug 
    docker: 
     name: "{{containerName}}" 
     state: reloaded 
     command: "java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address={{debugPort}} -jar {{containerImage}}-{{containerJarVersion}}.jar" 
    when: enableDebug # Will run when the value of eanbleDebug is True 

    - name: Start Container 
    docker: 
     name: "{{containerName}}" 
     state: reloaded 
     command: "java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address={{debugPort}} -jar {{containerImage}}-{{containerJarVersion}}.jar" 
    when: not enableDebug # Will run when the value of eanbleDebug is False 

Ich bin der eanbleDebug angenommen wird so sein:

eanbleDebug: True 
or 
eanbleDebug: False 

Hoffnung das wird Ihnen helfen

+0

Das ist mehr oder weniger genau was ich habe? Ich hatte gehofft, dass es eine Lösung geben würde, die bedeuten würde, dass ich das Stück nicht kopieren müsste ... – Ash