如何在 ansible 中更改 docker 命令docker_container具体取决于操作系统类型



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

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

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

你的方向对我来说似乎很好。

您能否确认您的剧本上启用了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

最新更新