Mad*_*key 10 permissions ansible docker docker-compose ansible-playbook
我正在使用 Ansible 和 Docker 设置服务器。我目前正在学习这两种技术,所以如果我在这里过于愚蠢,请容忍我。
为了运行运行 Docker 命令,用户必须在 docker 用户组中。所以我这样做:
- name: Ensure group "docker" exists
become: yes
group:
name: docker
state: present
- name: Add ansible user to docker group
become: yes
user:
name: "{{ansible_user}}"
groups: docker
append: yes
Run Code Online (Sandbox Code Playgroud)
在后来的剧本(但相同的剧本)中,我将执行以下操作:
- name: build
command: docker-compose build --pull
args:
chdir: /docker
- name: start services
command: docker-compose -f docker-compose.yml up -d
args:
chdir: /docker
Run Code Online (Sandbox Code Playgroud)
这在第一次运行时永远不起作用。“构建”任务总是失败,抱怨它找不到 docker(这是由于缺少访问权限)。如果我手动登录,因为{{ansible_user}}
我可以很好地运行 docker,并且如果我等待足够长的时间(以便 Ansible 将打开一个新的 SSH 会话,我认为)剧本也可以正常工作,这让我相信{{ansible_user}}
没有由于 Ansible 将 SSH 会话重新用于剧本中的所有任务,因此选择了新组。
所以我该怎么做?我也试过
- name: build
become: yes
become_user: "{{ansible_user}}"
become_method: su
command: docker-compose build --pull
args:
chdir: /docker
Run Code Online (Sandbox Code Playgroud)
这样ansible会进入一个新会话,但这可能会失败,因为我需要输入密码,而且我认为没有办法直接在任务中做到这一点。
关于如何以非黑客的方式解决这个问题的任何想法?我不敢相信这是一个如此罕见的用例,以至于没有标准的方法来解决这个问题。可能我只是忽略了一些东西。
Zor*_*che 14
我不确定它是否适合你,但我建议你尝试添加一个 reset_connection。
- name: reset ssh connection
meta: reset_connection
Run Code Online (Sandbox Code Playgroud)
这里有一个例子。
您可能希望将其添加为处理程序,并从您的用户/组修改任务中通知它。然后还添加一个,meta: flush_handlers
以便仅在需要时重置连接。
归档时间: |
|
查看次数: |
5854 次 |
最近记录: |