Added client.registry role to mirror docker images

Change-Id: I4e7815ac087d9d08f3fe80e7bf28f6076d64b77b
diff --git a/README.rst b/README.rst
index ff95bc1..81cb038 100644
--- a/README.rst
+++ b/README.rst
@@ -181,6 +181,24 @@
                 depends_on:
                   - db
 
+Registry
+^^^^^^^^
+
+.. code-block:: yaml
+
+    docker:
+      client:
+        registry:
+          target_registry: apt:5000
+          image:
+            - registry: docker
+              name: compose:1.8.0
+            - registry: tcpcloud
+              name: jenkins:latest
+            - registry: ""
+              name: registry:2
+              target_registry: myregistry
+
 Service
 -------
 
diff --git a/docker/client/init.sls b/docker/client/init.sls
index e99aa8b..8e0ca58 100644
--- a/docker/client/init.sls
+++ b/docker/client/init.sls
@@ -12,6 +12,9 @@
   {%- if client.stack is defined %}
   - docker.client.stack
   {%- endif %}
+  {%- if client.registry is defined %}
+  - docker.client.registry
+  {%- endif %}
   {%- if client.service is defined %}
   - docker.client.service
   {%- endif %}
diff --git a/docker/client/registry.sls b/docker/client/registry.sls
new file mode 100644
index 0000000..c8a366b
--- /dev/null
+++ b/docker/client/registry.sls
@@ -0,0 +1,31 @@
+{% from "docker/map.jinja" import client with context %}
+
+include:
+  - docker.client
+
+{%- for image in client.registry.get('image', {}) %}
+
+{%- set target_registry = image.get('target_registry', client.registry.target_registry) ~ '/' %}
+{%- if image.registry is defined and image.registry != "" and image.registry is not none %}
+{%- set source_registry = image.registry ~ '/' %}
+{%- else %}
+{%- set source_registry = "" %}
+{%- endif %}
+
+docker_image_{{ image.name }}_pull:
+  cmd.run:
+    - name: docker pull {{ source_registry }}{{ image.name }}
+
+docker_image_{{ image.name }}_tag:
+  cmd.run:
+    - name: docker tag {{ source_registry }}{{ image.name }} {{ target_registry }}{{ image.name }}
+    - require:
+        - cmd: docker_image_{{ image.name }}_pull
+
+docker_image_{{ image.name }}_push:
+  cmd.run:
+    - name: docker push {{ target_registry }}{{ image.name }}
+    - require:
+        - cmd: docker_image_{{ image.name }}_tag
+
+{%- endfor %}
\ No newline at end of file