Как использовать Ansible с CoreOS?
Ведь для использования Ansible необходимо иметь python интерпретатор
"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",
к счастью у ansible есть режим так называемой raw работы, без использования интерпретатора python, который и даст установить python и необходимые модули.
запускаем
ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles
и создаем рецепт bootstrap.yml
- hosts: coreos
gather_facts: False
roles:
- defunctzombie.coreos-bootstrap
и запускаем для нужного хоста coreos
ansible-playbook bootstrap.yml
это загрузит соответствующую версию мини-питона и даст ansible возможность выполняться на хосте как обычно.
Я использую macOS, поэтому пришлось ствить ansible из pip пакетов командой
sudo pip install ansible
pip install --upgrade setuptools --user python
pip install --upgrade pyasn1 --user python
Update:
в новой версии ansible вместо пакета docker предлагается использовать docker-container и docker-image, поэтому https://coreos.com/blog/managing-coreos-with-ansible/ немного устарел.
Вот мой работоспособный site.yml
- name: Nginx Example
hosts: coreos
tasks:
##- name: Start etcd
#service: name=etcd.service state=started
- name: Install docker-py
pip: name=docker-py executable=/home/core/bin/pip
- name: Install PyYAML
pip: name=PyYAML executable=/home/core/bin/pip
- name: Install docker-compose
pip: name=docker-compose executable=/home/core/bin/pip
- name: launch nginx container
docker_container:
name: "nginx-proxy"
image: "jwilder/nginx-proxy"
ports: "80:80"
restart_policy: always
state: started
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- name: copy docker-compose.yml
copy: src=./Sites/it-premium/docker-compose.prod.yml dest=/home/core/it-premium/docker-compose.yml
tags: deploy
- name: copy sqlite
copy: src=./Sites/it-premium/sqlite dest=/home/core/it-premium/ directory_mode=yes mode=0644
tags: deploy
- name: launch it-premium docker-compose with 2 containers
docker_service:
project_src: it-premium
build: no
register: output
- debug: var=output
- assert:
that: "not output.changed "
здесь я копирую docker-compose.yml подготовленный для продакшена и sqlite3 продакшен базу из бекапа.