Pārlūkot izejas kodu

Merge pull request #3332 from giuseppe/system-containers-ha

system containers: add support for HA deployments
Giuseppe Scrivano 8 gadi atpakaļ
vecāks
revīzija
ec7340eb70

+ 16 - 0
playbooks/adhoc/uninstall.yml

@@ -148,6 +148,22 @@
       - vovsbr
     when: "{{ openshift_remove_all | default(true) | bool }}"
 
+  - shell: atomic uninstall "{{ item }}"-master-api
+    changed_when: False
+    failed_when: False
+    with_items:
+    - openshift-enterprise
+    - atomic-enterprise
+    - origin
+
+  - shell: atomic uninstall "{{ item }}"-master-controllers
+    changed_when: False
+    failed_when: False
+    with_items:
+    - openshift-enterprise
+    - atomic-enterprise
+    - origin
+
   - shell: atomic uninstall "{{ item }}"-master
     changed_when: False
     failed_when: False

+ 44 - 3
roles/openshift_master/tasks/system_container.yml

@@ -17,7 +17,8 @@
   changed_when: "'Extracting' in update_result.stdout"
   when:
     - ("master" in result.stdout)
-    - (openshift.common.version is defined) and (openshift.common.version == openshift_version) | bool
+    - l_is_same_version
+    - not l_is_ha
 
 - name: Uninstall Master system container package
   command: >
@@ -25,12 +26,52 @@
   failed_when: False
   when:
     - ("master" in result.stdout)
-    - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) | bool
+    - not l_is_same_version
+    - not l_is_ha
 
 - name: Install Master system container package
   command: >
     atomic install --system --name={{ openshift.common.service_type }}-master {{ openshift.common.system_images_registry }}/{{ openshift.master.master_system_image }}:{{ openshift_image_tag }}
   when:
-    - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) or ("master" not in result.stdout) | bool
+    - not l_is_same_version or ("master" not in result.stdout) | bool
+    - not l_is_ha
+  notify:
+    - restart master
+
+# HA
+- name: Update Master HA system container package
+  command: >
+    atomic containers update {{ openshift.common.service_type }}-master-{{ item }}
+  register: update_result
+  changed_when: "'Extracting' in update_result.stdout"
+  with_items:
+    - api
+    - controllers
+  when:
+    - ("master" in result.stdout)
+    - l_is_same_version
+    - l_is_ha
+
+- name: Uninstall Master HA system container package
+  command: >
+    atomic uninstall {{ openshift.common.service_type }}-master-{{ item }}
+  failed_when: False
+  with_items:
+    - api
+    - controllers
+  when:
+    - ("master" in result.stdout)
+    - not l_is_same_version
+    - l_is_ha
+
+- name: Install Master HA system container package
+  command: >
+    atomic install --system --set COMMAND={{ item }} --name={{ openshift.common.service_type }}-master-{{ item }} {{ openshift.common.system_images_registry }}/{{ openshift.master.master_system_image }}:{{ openshift_image_tag }}
+  with_items:
+    - api
+    - controllers
+  when:
+    - not l_is_same_version or ("master" not in result.stdout) | bool
+    - l_is_ha
   notify:
     - restart master

+ 6 - 2
roles/openshift_master/tasks/systemd_units.yml

@@ -27,7 +27,9 @@
   template:
     src: "master_docker/master.docker.service.j2"
     dest: "{{ containerized_svc_dir }}/{{ openshift.common.service_type }}-master.service"
-  when: openshift.common.is_containerized | bool and (openshift.master.ha is not defined or not openshift.master.ha | bool and not openshift.common.is_master_system_container | bool)
+  when:
+  - openshift.common.is_containerized | bool and (openshift.master.ha is not defined or not openshift.master.ha) | bool
+  - not openshift.common.is_master_system_container | bool
   register: create_master_unit_file
 
 - command: systemctl daemon-reload
@@ -37,7 +39,9 @@
   template:
     src: "{{ ha_svc_template_path }}/atomic-openshift-master-{{ item }}.service.j2"
     dest: "{{ containerized_svc_dir }}/{{ openshift.common.service_type }}-master-{{ item }}.service"
-  when: openshift.master.ha is defined and openshift.master.ha | bool and openshift_master_cluster_method == "native"
+  when:
+  - openshift.master.ha is defined and openshift.master.ha | bool and openshift_master_cluster_method == "native"
+  - not openshift.common.is_master_system_container | bool
   with_items:
   - api
   - controllers

+ 3 - 0
roles/openshift_master/vars/main.yml

@@ -18,3 +18,6 @@ openshift_master_valid_grant_methods:
 - auto
 - prompt
 - deny
+
+l_is_ha: "{{ openshift.master.ha is defined and openshift.master.ha | bool }}"
+l_is_same_version: "{{ (openshift.common.version is defined) and (openshift.common.version == openshift_version) | bool }}"

+ 5 - 3
roles/openshift_node/tasks/node_system_container.yml

@@ -16,14 +16,16 @@
   register: update_result
   changed_when: "'Extracting' in update_result.stdout"
   when:
-  - (openshift.common.version is defined) and (openshift.common.version == openshift_version) and ("node" in result.stdout) | bool
+  - l_is_same_version
+  - ("node" in result.stdout)
 
 - name: Uninstall Node system container package
   command: >
     atomic uninstall {{ openshift.common.service_type }}-node
   failed_when: False
   when:
-  - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) and ("node" in result.stdout) | bool
+  - not l_is_same_version
+  - ("node" in result.stdout)
 
 - name: Install Node system container package
   command: >
@@ -31,4 +33,4 @@
   register: install_node_result
   changed_when: "'Extracting' in pull_result.stdout"
   when:
-  - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) or ("node" not in result.stdout) | bool
+  - not l_is_same_version or ("node" not in result.stdout) | bool

+ 5 - 5
roles/openshift_node/tasks/openvswitch_system_container.yml

@@ -9,8 +9,6 @@
   command: >
     atomic containers list --no-trunc -a -f container=openvswitch
   register: result
-  when:
-  - openshift.common.is_openvswitch_system_container | bool
 
 - name: Update OpenvSwitch system container package
   command: >
@@ -18,19 +16,21 @@
   register: update_result
   changed_when: "'Extracting' in update_result.stdout"
   when:
-  - (openshift.common.version is defined) and (openshift.common.version == openshift_version) and ("openvswitch" in result.stdout) | bool
+  - l_is_same_version
+  - ("openvswitch" in result.stdout) | bool
 
 - name: Uninstall OpenvSwitch system container package
   command: >
     atomic uninstall openvswitch
   failed_when: False
   when:
-  - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) and ("openvswitch" in result.stdout) | bool
+  - not l_is_same_version
+  - ("openvswitch" in result.stdout) | bool
 
 - name: Install OpenvSwitch system container package
   command: >
     atomic install --system --name=openvswitch {{ openshift.common.system_images_registry }}/{{ openshift.node.ovs_system_image }}:{{ openshift_image_tag }}
   when:
-  - (openshift.common.version is not defined) or (openshift.common.version != openshift_version) or ("openvswitch" not in result.stdout) | bool
+  - not l_is_same_version or ("openvswitch" not in result.stdout) | bool
   notify:
   - restart docker

+ 2 - 0
roles/openshift_node/vars/main.yml

@@ -0,0 +1,2 @@
+---
+l_is_same_version: "{{ (openshift.common.version is defined) and (openshift.common.version == openshift_version) | bool }}"