从 docker 容器运行 ansible playbook 并在主机上部署

Per*_*rsi 3 ansible docker

我想使用来自 docker 容器的 ansible 在我的本地机器上运行 ansible playbook。这是我的 Ansible Dockerfile 的样子:

FROM alpine:3.6

WORKDIR /ansible

RUN apk update \
    && apk add ansible

ENTRYPOINT ["ansible-playbook"]
Run Code Online (Sandbox Code Playgroud)

剧本.yml:

---
- hosts: localhost
  roles:
  - osx
Run Code Online (Sandbox Code Playgroud)

角色/osx/tasks/main.yml

---
- name: Welcome
  shell: echo "Hello"
  when: ansible_distribution == 'MacOSX'
Run Code Online (Sandbox Code Playgroud)

然后我运行它:

docker build -t ansible_image:latest .
docker run --rm --network host \
-v $(pwd):/ansible \
ansible_image:latest ansible/playbook.yml
Run Code Online (Sandbox Code Playgroud)

我的主机操作系统是 OS X。我希望 osx 角色会执行,但似乎 playbook 是在 alpine 容器上运行的。我想问一下如何在docker中指示ansible在我的本地机器上部署东西?

lar*_*sks 6

您的剧本针对localhost

---
- hosts: localhost
  roles:
  - osx
Run Code Online (Sandbox Code Playgroud)

这意味着 Ansible 将在运行 playbook 时以本地机器(即您的 Ansible 容器)为目标。Ansible 旨在将 playbook 也应用于远程机器,通常通过使用ssh. 假设可以使用 连接从您的 Ansible 容器到您的主机ssh,您只需创建一个适当的清单文件,然后适当地定位您的剧本:

---
- hosts: my_osx_host
  roles:
  - osx
Run Code Online (Sandbox Code Playgroud)

如果您刚开始使用 Ansible,您可能希望从入门文档开始,然后从那里开始。您会在该站点上找到应该引导您完成创建清单文件的过程的文档。