The blog about containerisation, virtual machines and useful shell snippets and findings

Как использовать 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 продакшен базу из бекапа.