Przeglądaj źródła

pull docker images only if not already present

Jason DeTiberus 9 lat temu
rodzic
commit
d3edce9c19

+ 8 - 3
roles/etcd/tasks/main.yml

@@ -11,10 +11,15 @@
   action: "{{ ansible_pkg_mgr }} name=etcd-2.* state=present"
   when: not openshift.common.is_containerized | bool
 
-- name: Pull etcd container
-  command: >
-    docker pull {{ openshift.etcd.etcd_image }}
+- name: Get docker images
+  command: docker images
+  changed_when: false
   when: openshift.common.is_containerized | bool
+  register: docker_images
+
+- name: Pull etcd container
+  command: docker pull {{ openshift.etcd.etcd_image }}
+  when: openshift.common.is_containerized | bool and openshift.etcd.etcd_image not in docker_images.stdout
 
 - name: Install etcd container service file
   template:

+ 10 - 6
roles/openshift_master/tasks/main.yml

@@ -85,12 +85,16 @@
   action: "{{ ansible_pkg_mgr }} name={{ openshift.common.service_type }}-master{{ openshift_version  }} state=present"
   when: not openshift.common.is_containerized | bool
 
-# TODO: enable when ansible#1993 lands and is widespread enough
-# - name: Docker image present
-#   docker:
-#     image: "{{ openshift.common.docker.image }}"
-#     state: image_present
-#   when: openshift.common.is_containerized | bool
+- name: Get docker images
+  command: docker images
+  changed_when: false
+  when: openshift.common.is_containerized | bool
+  register: docker_images
+
+- name: Pull required docker image
+  command: >
+    docker pull {{ openshift.master.master_image }}
+  when: openshift.common.is_containerized | bool and openshift.master.master_image not in docker_images.stdout
 
 - name: Install Master docker service file
   template:

+ 7 - 1
roles/openshift_master_ca/tasks/main.yml

@@ -12,10 +12,16 @@
     path: "{{ openshift_master_config_dir }}"
     state: directory
 
+- name: Get docker images
+  command: docker images
+  changed_when: false
+  when: openshift.common.is_containerized | bool
+  register: docker_images
+
 - name: Pull required docker image
   command: >
     docker pull {{ openshift.common.cli_image }}
-  when: openshift.common.is_containerized | bool
+  when: openshift.common.is_containerized | bool and openshift.common.cli_image not in docker_images.stdout
 
 - name: Create the master certificates if they do not already exist
   command: >

+ 16 - 0
roles/openshift_node/tasks/main.yml

@@ -46,6 +46,17 @@
   action: "{{ ansible_pkg_mgr }} name={{ openshift.common.service_type }}-sdn-ovs{{ openshift_version }} state=present"
   when: openshift.common.use_openshift_sdn and not openshift.common.is_containerized | bool
 
+- name: Get docker images
+  command: docker images
+  changed_when: false
+  when: openshift.common.is_containerized | bool
+  register: docker_images
+
+- name: Pull required docker image
+  command: >
+    docker pull {{ openshift.node.node_image }}
+  when: openshift.common.is_containerized | bool and openshift.node.node_image not in docker_images.stdout
+
 - name: Install Node docker service file
   template:
     dest: "/etc/systemd/system/{{ openshift.common.service_type }}-node.service"
@@ -62,6 +73,11 @@
     group: root
   when: openshift.common.is_containerized | bool
 
+- name: Pull required docker image
+  command: >
+    docker pull {{ openshift.node.ovs_image }}
+  when: openshift.common.is_containerized | bool and openshift.node.ovs_image not in docker_images.stdout
+
 - name: Install OpenvSwitch docker service file
   template:
     dest: "/etc/systemd/system/openvswitch.service"