【问题标题】:How change docker command in ansible docker_container depending on os type如何根据操作系统类型更改 ansible docker_container 中的 docker 命令
【发布时间】:2020-06-23 05:27:21
【问题描述】:

我有一些运行 docker 容器的 ansible playbook,如下所示:

  - name: Container present 
    docker_container:
      name: myapp
      state: started
      image: myapp
      restart_policy: always
      ports:
        - "7070:7070"
      command: ["java","-Dhttp.proxyHost=1.2.3.1", "-Dhttp.proxyPort=3128", '-Dhttp.nonProxyHosts="localhost|127.0.0.1|10.250.*.*"',"-jar", "/opt/myapp/app.jar", "--spring.profiles.active=docker,swagger"]

我想根据操作系统类型更改命令。例如如果 Centos - 我需要这个命令:

command: ["java","-jar", "/opt/myapp/app.jar", "--spring.profiles.active=docker,swagger"]

如果是 Ubuntu 或 Debian 这个命令:

    command: ["java","-Dhttp.proxyHost=1.2.3.1", "-Dhttp.proxyPort=3128", '-Dhttp.nonProxyHosts="localhost|127.0.0.1|10.250.*.*"',"-jar", "/opt/myapp/app.jar", "--spring.profiles.active=docker,swagger"]

我想我必须用 set_fact 来做,但是怎么做——我不知道。可能是这样的:

- set_fact:
  command: '["java","-jar", "/opt/myapp/app.jar", "--spring.profiles.active=docker,swagger"]'
  when: ansible_distribution == 'CentOS'

但我不确定它不会导致一些错误。

【问题讨论】:

  • 您遇到的错误是什么?

标签: java linux docker ansible


【解决方案1】:

我觉得你的方向很好。

您能否确认您的剧本已启用gather_facts?如果没有特别覆盖,它应该默认启用。此外,set_fact 任务中的缩进需要更正。

抱歉,我无法测试所有发行版,但类似下面的内容应该可以工作。

    - set_fact:
        command_var:
          [
            "java",
            "-jar",
            "/opt/myapp/app.jar",
            "--spring.profiles.active=docker,swagger"
          ]
      when: ansible_distribution == 'CentOS'

    - set_fact:
        command_var:
          [
            "java",
            "-Dhttp.proxyHost=1.2.3.1",
            "-Dhttp.proxyPort=3128",
            '-Dhttp.nonProxyHosts="localhost|127.0.0.1|10.250.*.*"',
            "-jar",
            "/opt/myapp/app.jar",
            "--spring.profiles.active=docker,swagger"
          ]
      when: 
        - command_var is undefined
        - ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'

    - name: Container present 
      docker_container:
        name: myapp
        state: started
        image: myapp
        restart_policy: always
        ports:
          - "7070:7070"
        command: "{{ command_var }}"
      when: command_var is defined

【讨论】:

  • 或更少的复制意大利面:command_var: "{{ ["java"] + ([] if ansible_distribution == 'CentOS' else ["-Dhttp.proxy..."]) + ["-jar", "/opt/..."] }}"(当然,格式更好,但作为示例......)
猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 2015-01-15
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多