ansible playbook中的微小变化不会在目标主机中更新

时间:2016-06-22 07:08:42

标签: nginx docker ansible

我的剧本是(除其他事项外)启动码头集装箱:

- name: Restart nginx container
  docker:
    name: nginx
    image: my-nginx
    state: started
    ports:
    - "{{ nginx_port }}:80"
    volumes:
    - "{{ host_socket }}:{{ container_socket }}"

这是正确启动容器。但是,如果我决定需要在另一个端口运行nginx,并再次运行该剧本,则不会重新启动容器。似乎ansible对容器启动和运行感到满意,但不验证其余参数是否正确。

我在这里看到两个选项:

  1. 每当我运行playbook时强制重启,没有条件要求,这样我就确保最新的配置是活动的。我不喜欢这个,因为大多数时候参数不会改变。
  2. 强制ansible更准确并检查所有参数,如果 已更改,则重新启动容器。我不确定是否有这样的选择。
  3. 如何在检查容器状态时告诉ansible更准确?

2 个答案:

答案 0 :(得分:1)

不推荐使用docker模块,我认为它必须是它的问题之一。

你试过docker_container module了吗?你需要ansible> 2.1.0但我认为值得一试。

答案 1 :(得分:0)

  

似乎ansible对容器启动和运行感到满意,但不会验证其余参数是否正确。

是的,因为您指定了state: started,这明确意味着:

  

“started”断言匹配的容器都存在且正在运行,但如果任何配置发生更改,则不执行任何操作。

您可能需要reloaded代替:

  

“reloaded”(在Ansible 1.9中添加)断言所有匹配的容器都在运行,并重新启动任何有任何图像或配置过期的容器。