Ansible sudo模式取决于变量

时间:2015-07-20 23:25:26

标签: ansible

我正在编写一个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来实现我的目标?

1 个答案:

答案 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"