我正在编写一个Ansible角色来将Docker容器部署到主机。我的库存文件包含CoreOS和Ubuntu服务器,Docker已安装在Ubuntu上,不允许非root用户使用(我需要sudo docker ...
)。 CoreOS主机并不需要它。
我想编写一个任务,仅在需要时使用sudo
:
- name: Start container XX
sudo: "{{ ansible_os_family and ansible_os_family == 'Debian' }}"
docker:
...
使用debug
模块,我可以看到此表达式返回" True"。
直接使用sudo: "True"
可以正常使用。
但是使用给定的代码片段不起作用,则不启用sudo模式。
如何有条件地使用sudo
来实现我的目标?
答案 0 :(得分:0)
我不熟悉docker
模块,但我看到了一个解决方案。您需要在任务中使用条件when
和其他参数:
- hosts: all
tasks:
- name: Debug message
debug: msg="{{ ansible_os_family and ansible_os_family == 'Debian' }}"
- name: Rooted
shell: service docker restart
sudo: True
when: "{{ ansible_os_family and ansible_os_family == 'Debian' }}|default(false)|bool"
- name: Not root
shell: service docker restart
# This will fail when sudo is needed.
# When you remove 'not' in condition you will see that
when: "not {{ ansible_os_family and ansible_os_family == 'Debian' }}|default(false)|bool"