Saltstack v2017.7.0 compatibility, Docker 17.06 compatibility, adds force and build options to dockerng.image_present  (#15)

* extend container and compose functionality, make compose file idiomatic, allow setting mine function

* "network" backward compatibility

* conformed to naming convention and changed file mode

* fixed Jinja so that docker.swarm can render even if swarm master ip is not available from the mine

* renamed grain_function to mine_function for more accurate description

* Saltstack v2017.7.0 compatibility, Docker 17.06 compatibility, adds force and build options to dockerng.image_present
diff --git a/docker/client/container.sls b/docker/client/container.sls
index 322f616..cf47819 100644
--- a/docker/client/container.sls
+++ b/docker/client/container.sls
@@ -9,8 +9,16 @@
   {%- set required_containers = [] %}
 
 {{id}}_image:
+  {%- if grains['saltversioninfo'][0] >= 2017 %}
+  docker_image.present:
+  {%- else %}
   dockerng.image_present:
+  {%- endif %}
     - name: {{ container.image }}
+    {%- if container.build is defined %}
+    - build: {{ container.build }}
+    {%- endif %}
+    - force: {{ container.force|default(False) }}
     {%- if grains.get('noservices') %}
     - onlyif: /bin/false
     {%- endif %}
@@ -41,7 +49,11 @@
 {%- endfor %}
 
 {{id}}_container:
+  {%- if grains['saltversioninfo'][0] >= 2017 %}
+  docker_container.running:
+  {%- else %}
   dockerng.running:
+  {%- endif %}
     - name: {{id}}
     - start: {{ container.start|default(True) }}
     - user: {{ container.user|default("root") }}
@@ -94,11 +106,19 @@
   {%- if 'restart' in container %}
     - restart_policy: {{ container.restart }}
   {%- endif %}
-    - require:
+    - watch:
+  {%- if grains['saltversioninfo'][0] >= 2017 %}
+      - docker_image: {{id}}_image
+  {%- else %}
       - dockerng: {{id}}_image
+  {%- endif %}    
   {%- if required_containers is defined %}
     {%- for containerid in required_containers %}
+      {%- if grains['saltversioninfo'][0] >= 2017 %}
+      - docker_container: {{containerid}}
+      {%- else %}
       - dockerng: {{containerid}}
+      {%- endif %}
     {%- endfor %}
   {%- endif %}
   {%- for key, value in container.iteritems() %}
diff --git a/docker/client/service.sls b/docker/client/service.sls
index 178ed33..42c8270 100644
--- a/docker/client/service.sls
+++ b/docker/client/service.sls
@@ -24,6 +24,7 @@
         docker service create
         --name {{ name }}
         --with-registry-auth
+        --detach=true
         {%- 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 %}
@@ -60,8 +61,8 @@
         i=1;
         while [ $i -lt 5 ]; do
         docker service update
-        --name {{ name }}
         --with-registry-auth
+        --detach=true
         {%- 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 %}
diff --git a/docker/map.jinja b/docker/map.jinja
index d70b4b0..012d86d 100644
--- a/docker/map.jinja
+++ b/docker/map.jinja
@@ -74,4 +74,6 @@
   - volumes_from
   - links
   - restart
+  - force
+  - build
 {%- endload %}