Помимо предоставления localhost (машины, на которой установлен Ansible), вы также можете указать Ansible:
- создать новый док-контейнер,
- предоставить этот контейнер,
- уничтожьте этот контейнер.
Для этого вам понадобится такой hosts.yaml
файл:
all:
hosts:
mycontainer:
ansible_connection: docker
localhost:
ansible_connection: local
такой playbook.yaml
файл:
---
- name: Create a container to be provisioned later
hosts: localhost
tasks:
- name: create docker container
docker_container:
name: mycontainer
image: python:2.7.16-slim-stretch
command: ["sleep", "1d"]
- name: Provision the container created above
hosts: mycontainer
roles:
- simple
и еще один файл playbook: destroy.yaml
, используемый для уничтожения контейнера:
---
- name: Destroy a container
hosts: localhost
tasks:
- name: destroy docker container
docker_container:
name: mycontainer
state: absent
Создайте также простую роль: roles/simple/taksks/main.yaml
---
- name: Create a file
copy:
content: "hi!!"
dest: /tmp/hello
force: yes
mode: 0555
А теперь, чтобы создать контейнер и подготовить его, запустите:
ansible-playbook -i ./hosts.yaml ./playbook.yml
Убедитесь, что контейнер был подготовлен (файл был создан):
docker exec mycontainer cat /tmp/hello
Чтобы уничтожить контейнер, запустите:
ansible-playbook -i ./hosts.yaml ./destroy.yml
Минусы конечно есть:
- в контейнере должен быть установлен питон
- некоторые модули Ansible могут не работать, потому что необходимо установить дополнительные пакеты python. Например. если вы хотите развернуть docker-контейнеры (в docker-контейнере), вам необходимо установить docker python SDK (
pip3 install docker
)
Меня вдохновило это сообщение в блоге: https://medium.com/@andreilhicas/provision-docker-containers-with-ansible-30cc5ee6d950.
person
Ewa
schedule
29.09.2019