blob: 178ed3382052897ea83d34fc8e11bd6f579ac823 [file] [log] [blame]
{% from "docker/map.jinja" import client with context %}
include:
- docker.client
{%- for name, service in client.get('service', {}).iteritems() %}
{%- if service.get('enabled', True) %}
{%- for vname, volume in service.get('volume', {}).iteritems() %}
{%- if volume.get('type', 'bind') == 'bind' %}
docker_service_{{ name }}_volume_{{ vname }}:
file.directory:
- name: {{ volume.source }}
- makedirs: true
- unless: "test -e {{ volume.source }}"
{%- endif %}
{%- endfor %}
docker_service_{{ name }}_create:
cmd.run:
- name: >
i=1;
while [ $i -lt 5 ]; do
docker service create
--name {{ name }}
--with-registry-auth
{%- for env, value in service.get('environment', {}).iteritems() %} -e {{ env }}="{{ value }}"{%- endfor %}
{%- for port in service.get('ports', []) %} -p {{ port }}{%- endfor %}
{%- for name, host in service.get('hosts', {}).iteritems() %} --host {{ host.get('name', name) }}:{{ host.address }}{%- endfor %}
{%- for label, value in service.get('label', {}).iteritems() %} -l {{ label }}="{{ value }}"{%- endfor %}
{%- if service.network is defined %} --network {{ service.network }}{%- endif %}
{%- if service.replicas is defined %} --replicas {{ service.replicas }}{%- endif %}
{%- if service.user is defined %} --user {{ service.user }}{%- endif %}
{%- if service.workdir is defined %} --workdir {{ service.workdir }}{%- endif %}
{%- if service.mode is defined %} --mode {{ service.mode }}{%- endif %}
{%- if service.endpoint is defined %} --endpoint-mode {{ service.endpoint }}{%- endif %}
{%- if service.constraint is defined %} --constraint {{ service.constraint }}{%- endif %}
{%- for name, volume in service.get('volume', {}).iteritems() %} --mount {% for key, value in volume.iteritems() %}{{ key }}={{ value }}{% if not loop.last %},{% endif %}{% endfor %}{%- endfor %}
{%- for param, value in service.get('restart', {}).iteritems() %} --restart-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('update', {}).iteritems() %} --update-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('log', {}).iteritems() %} --log-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('limit', {}).iteritems() %} --limit-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('reserve', {}).iteritems() %} --reserve-{{ param }} {{ value }}{%- endfor %}
{{ service.image }}
{%- if service.command is defined %} {{ service.command }}{%- endif %}
{%- for arg in service.get('args', []) %} {{ arg }}{%- endfor %};
ret=$?;
[ $ret -eq 0 ] && exit 0;
echo "Service creation failed, retrying in 3 seconds.." >&2;
sleep 3;
i=$[ $i + 1 ];
done
- shell: /bin/bash
- unless: "docker service ls | grep {{ name }}"
{%- if service.get('update_service', False) %}
docker_service_{{ name }}_update:
cmd.run:
- name: >
i=1;
while [ $i -lt 5 ]; do
docker service update
--name {{ name }}
--with-registry-auth
{%- if service.replicas is defined %} --replicas {{ service.replicas }}{%- endif %}
{%- if service.user is defined %} --user {{ service.user }}{%- endif %}
{%- if service.workdir is defined %} --workdir {{ service.workdir }}{%- endif %}
{%- if service.endpoint is defined %} --endpoint-mode {{ service.endpoint }}{%- endif %}
{%- for param, value in service.get('restart', {}).iteritems() %} --restart-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('update', {}).iteritems() %} --update-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('log', {}).iteritems() %} --log-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('limit', {}).iteritems() %} --limit-{{ param }} {{ value }}{%- endfor %}
{%- for param, value in service.get('reserve', {}).iteritems() %} --reserve-{{ param }} {{ value }}{%- endfor %}
--image {{ service.image }}
{{ name }};
ret=$?;
[ $ret -eq 0 ] && exit 0;
echo "Service update failed, retrying in 3 seconds.." >&2;
sleep 3;
i=$[ $i + 1 ];
done
- shell: /bin/bash
- require:
- cmd: docker_service_{{ name }}_create
{%- endif %}
{%- else %}
docker_service_{{ name }}_rm:
cmd.run:
- name: docker service rm {{ name }}
- onlyif: "docker service ls | grep {{ name }}"
{%- endif %}
{%- endfor %}