Ansible – 根据docker模块中的库存文件有条件地设置卷和tls主机名

我正在使用Ansible将我的容器部署到生产环境中.在开发过程中,我想让Ansible在我的localhost而不是生产服务器上部署所有容器.

生产服务器在Ubuntu上运行,localhost是OS X和boot2docker.

我有2个库存文件,生产和localhost.我的目录结构如下:

.
|--inventories
|  |localhost
|  |production
|
|--group_vars
|  |all
|  |localhost
|  |production
|
|--roles
|  |--web
|     |--tasks
         |main.yml
|
|web.yml 

web.yml只定义主机组并分配Web角色.

/roles/web/tasks/main.yml看起来像这样:

- name: Run web container
  docker:
    name: web
    image: some/image
    state: reloaded
    ...
    tls_hostname: boot2docker
    volumes:
      - "/data/db:/data/db"
    env:
      ...
  tags:
    - ...

我需要有条件地设置tls_hostname,仅在使用localhost库存时;同样,我只想在使用生产库存文件时设置卷.

对Ansible来说很新 – 似乎我没有以正确的方式接近这个,有更简单的方法吗?我想避免创建完全独立的任务来本地部署;我只需要一种方法来有条件地定义volume和tls_hostname(否则保留默认设置)

最佳答案
从Ansible 1.8开始,您可以使用具有特殊omit值的默认过滤器来省略变量和模块参数.例如,

- name: Run web container
  docker:
    name: web
    image: some/image
    state: reloaded
    ...
    tls_hostname: "{{ hostname | default('some default value') }}"
    volumes: "{{ volumes | default(omit) }}"
    env:
      ...
  tags:
    - ...

转载注明原文:Ansible – 根据docker模块中的库存文件有条件地设置卷和tls主机名 - 代码日志