| {% from "docker/map.jinja" import client with context %} |
| |
| {#- |
| This state is used for old-way docker-compose that doesn't work with Docker |
| Swarm mode. For Docker Swarm, use docker.client.stack |
| #} |
| |
| include: |
| - docker.client |
| {%- if client.compose.source.engine == 'docker' %} |
| - docker.host |
| {%- endif %} |
| |
| {%- if client.compose.source.engine == 'pkg' %} |
| docker_compose: |
| pkg.installed: |
| - names: {{ client.compose.source.pkgs }} |
| {%- elif client.compose.source.engine == 'pip' %} |
| docker_compose_python_pip: |
| pkg.installed: |
| - name: python-pip |
| - reload_modules: true |
| |
| docker_compose: |
| pip.installed: |
| - name: docker-compose |
| - require: |
| - pkg: docker_compose_python_pip |
| {%- elif client.compose.source.engine == 'docker' %} |
| docker_compose_wrapper: |
| file.managed: |
| - name: /usr/local/bin/docker-compose |
| - source: salt://docker/files/docker-compose |
| - template: jinja |
| - defaults: |
| image: {{ client.compose.source.image|default('docker/compose') }} |
| - mode: 755 |
| |
| docker_compose: |
| cmd.wait: |
| - name: /usr/local/bin/docker-compose version |
| - watch: |
| - file: docker_compose_wrapper |
| {%- endif %} |
| |
| {%- for app, compose in client.compose.iteritems() %} |
| {%- if compose.service is defined %} |
| |
| docker_{{ app }}_dir: |
| file.directory: |
| - name: {{ client.compose.base }}/{{ app }} |
| - makedirs: true |
| |
| docker_{{ app }}_compose: |
| file.managed: |
| - name: {{ client.compose.base }}/{{ app }}/docker-compose.yml |
| - source: salt://docker/files/docker-compose.yml |
| - template: jinja |
| - defaults: |
| compose: {{ compose }} |
| volume: {{ compose.volume|default({}) }} |
| service: {{ compose.service }} |
| network: {{ compose.network|default({}) }} |
| - require: |
| - file: docker_{{ app }}_dir |
| |
| {%- if compose.environment is defined %} |
| docker_{{ app }}_env: |
| file.managed: |
| - name: {{ client.compose.base }}/{{ app }}/.env |
| - source: salt://docker/files/docker-env |
| - template: jinja |
| - user: {{ compose.user|default("root") }} |
| - mode: 640 |
| - defaults: |
| env: {{ compose.environment }} |
| - require: |
| - file: docker_{{ app }}_dir |
| {%- else %} |
| docker_{{ app }}_env: |
| file.absent: |
| - name: {{ client.compose.base }}/{{ app }}/.env |
| {%- endif %} |
| |
| {# |
| TODO: These both resources (pull and state) can't be idempotent due to absence |
| of dry-run in docker-compose. |
| See https://github.com/docker/compose/issues/1203 |
| #} |
| {%- if compose.pull|default(False) == True %} |
| docker_{{ app }}_pull: |
| cmd.run: |
| - name: '{% if client.compose.source.engine == 'pip' %}/usr/local/bin/{% |
| endif %}docker-compose pull' |
| - cwd: {{ client.compose.base }}/{{ app }} |
| - user: {{ compose.user|default("root") }} |
| - require: |
| {%- if client.compose.source.engine == 'pkg' %} |
| - pkg: docker_compose |
| {%- elif client.compose.source.engine == 'pip' %} |
| - pip: docker_compose |
| {%- elif client.compose.source.engine == 'docker' %} |
| - cmd: docker_compose |
| {%- endif %} |
| - watch: |
| - file: docker_{{ app }}_env |
| - file: docker_{{ app }}_compose |
| {%- if compose.status is defined %} |
| - watch_in: |
| - cmd: docker_{{ app }}_{{ compose.status }} |
| {%- endif %} |
| {%- endif %} |
| |
| {%- if compose.status is defined %} |
| docker_{{ app }}_{{ compose.status }}: |
| cmd.run: |
| - name: '{% if client.compose.source.engine == 'pip' %}/usr/local/bin/{% |
| endif %}docker-compose {{ compose.status }} -d' |
| - cwd: {{ client.compose.base }}/{{ app }} |
| - user: {{ compose.user|default("root") }} |
| {%- if grains.get('noservices') %} |
| - onlyif: /bin/false |
| {%- endif %} |
| - require: |
| {%- if client.compose.source.engine == 'pkg' %} |
| - pkg: docker_compose |
| {%- elif client.compose.source.engine == 'pip' %} |
| - pip: docker_compose |
| {%- elif client.compose.source.engine == 'docker' %} |
| - cmd: docker_compose |
| {%- endif %} |
| - watch: |
| - file: docker_{{ app }}_env |
| - file: docker_{{ app }}_compose |
| {%- endif %} |
| {%- endif %} |
| {%- endfor %} |