Аргументы условного модуля Ansible

Можно ли включать аргумент модуля только при выполнении определенного условия без дублирования воспроизведения?

Пример:

У меня есть игра, которая выглядит следующим образом:

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

Я хочу изменить значение аргумента команды в зависимости от того, истинно ли условие или ложно? В настоящее время я должен продублировать всю игру и обернуть ее условием, что ужасно, поскольку отличается только один аргумент.

Текущее решение:

  - 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)

person Ash    schedule 26.04.2016    source источник
comment
Извините, я могу ошибаться. В чем разница между двумя задачами? Они выглядят одинаково для меня.   -  person shaps    schedule 26.04.2016
comment
Извините, ошибка копирования и вставки, обновлен пример кода!   -  person Ash    schedule 26.04.2016


Ответы (3)


Я думаю, вам все равно придется где-то использовать условное выражение (вы хотите делать разные вещи на основе условия в конце..:).

Единственное, о чем я могу думать, это чтобы вы не писали свою задачу дважды (вызывая все эти раздражающие skipped ), вы могли бы сделать следующее:

     # 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"
person shaps    schedule 26.04.2016

(Сейчас) Вы можете использовать этот встроенный условный механизм

start_container_command: "java {{'-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n,address={{debugPort}}' if not enableDebug else '' }} -jar {{containerImage}}-{{containerJarVersion}}.jar"
person mPrinC    schedule 31.10.2018

Вы можете использовать его следующим образом:

  - 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

Я предполагаю, что eanbleDebug будет таким:

eanbleDebug: True
or 
eanbleDebug: False

Надеюсь, что это поможет вам

person Arbab Nazar    schedule 26.04.2016
comment
Это примерно то, что у меня есть? Я надеялся, что найдется решение, которое позволит мне не дублировать пьесу... - person Ash; 26.04.2016