Browse Source

upgrade node mark 2

Michael Gugino 7 years ago
parent
commit
504930b191

+ 4 - 0
roles/openshift_node/tasks/config.yml

@@ -2,6 +2,10 @@
 - name: Install the systemd units
   include_tasks: systemd_units.yml
 
+- name: Pull container images
+  include_tasks: container_images.yml
+  when: openshift.common.is_containerized | bool
+
 - name: Start and enable openvswitch service
   systemd:
     name: openvswitch.service

+ 20 - 0
roles/openshift_node/tasks/container_images.yml

@@ -0,0 +1,20 @@
+---
+- name: Install Node system container
+  include_tasks: node_system_container.yml
+  when:
+  - l_is_node_system_container | bool
+
+- name: Install OpenvSwitch system containers
+  include_tasks: openvswitch_system_container.yml
+  when:
+  - openshift_node_use_openshift_sdn | bool
+  - l_is_openvswitch_system_container | bool
+
+- name: Pre-pull openvswitch image
+  command: >
+    docker pull {{ openshift.node.ovs_image }}:{{ openshift_image_tag }}
+  register: pull_result
+  changed_when: "'Downloaded newer image' in pull_result.stdout"
+  when:
+  - openshift_node_use_openshift_sdn | bool
+  - not l_is_openvswitch_system_container | bool

+ 2 - 21
roles/openshift_node/tasks/systemd_units.yml

@@ -16,29 +16,10 @@
   - name: include ovs service environment file
     include_tasks: config/install-ovs-service-env-file.yml
 
-  - name: Install Node system container
-    include_tasks: node_system_container.yml
-    when:
-    - l_is_node_system_container | bool
-
-  - name: Install OpenvSwitch system containers
-    include_tasks: openvswitch_system_container.yml
+  - include_tasks: config/install-ovs-docker-service-file.yml
     when:
     - openshift_node_use_openshift_sdn | bool
-    - l_is_openvswitch_system_container | bool
-
-- block:
-  - name: Pre-pull openvswitch image
-    command: >
-      docker pull {{ openshift.node.ovs_image }}:{{ openshift_image_tag }}
-    register: pull_result
-    changed_when: "'Downloaded newer image' in pull_result.stdout"
-
-  - include_tasks: config/install-ovs-docker-service-file.yml
-  when:
-  - openshift.common.is_containerized | bool
-  - openshift_node_use_openshift_sdn | bool
-  - not l_is_openvswitch_system_container | bool
+    - not l_is_openvswitch_system_container | bool
 
 - include_tasks: config/configure-node-settings.yml
 - include_tasks: config/configure-proxy-settings.yml

+ 15 - 55
roles/openshift_node/tasks/upgrade.yml

@@ -10,70 +10,29 @@
 
 # tasks file for openshift_node_upgrade
 
-- name: Stop node and openvswitch services
-  service:
-    name: "{{ item }}"
-    state: stopped
-  with_items:
-  - "{{ openshift_service_type }}-node"
-  - openvswitch
-  failed_when: false
-
-- name: Ensure containerized services stopped before Docker restart
-  service:
-    name: "{{ item }}"
-    state: stopped
-  with_items:
-  - etcd_container
-  - openvswitch
-  - "{{ openshift_service_type }}-master-api"
-  - "{{ openshift_service_type }}-master-controllers"
-  - "{{ openshift_service_type }}-node"
-  failed_when: false
-  when: openshift.common.is_containerized | bool
-
-- service:
-    name: docker
-    state: stopped
-  register: l_openshift_node_upgrade_docker_stop_result
-  until: not l_openshift_node_upgrade_docker_stop_result | failed
-  retries: 3
-  delay: 30
+- name: stop services for upgrade
+  include_tasks: upgrade/stop_services.yml
+
+# Ensure actually install latest package.
+- name: download docker upgrade rpm
+  command: "{{ ansible_pkg_mgr }} install -C -y docker{{ '-' + docker_version }}"
+  register: result
+  until: result | success
   when:
   - l_docker_upgrade is defined
   - l_docker_upgrade | bool
 
-- name: Stop rpm based services
-  service:
-    name: "{{ item }}"
-    state: stopped
-  with_items:
-  - "{{ openshift_service_type }}-node"
-  - openvswitch
-  failed_when: false
+- name: install pre-pulled rpms.
+  include_tasks: upgrade/rpm_upgrade_install.yml
+  vars:
+    openshift_version: "{{ openshift_pkg_version | default('') }}"
   when: not openshift.common.is_containerized | bool
 
+
 - include_tasks: "{{ node_config_hook }}"
   when: node_config_hook is defined
 
-# https://bugzilla.redhat.com/show_bug.cgi?id=1513054
-- name: Clean up dockershim data
-  file:
-    path: "/var/lib/dockershim/sandbox/"
-    state: absent
-
-- name: Disable swap
-  command: swapoff --all
-  when:
-  - openshift_node_upgrade_swap_result | default(False) | bool
-  - openshift_disable_swap | default(true) | bool
-  # End Disable Swap Block
-
-- name: Reset selinux context
-  command: restorecon -RF {{ openshift_node_data_dir }}/openshift.local.volumes
-  when:
-  - ansible_selinux is defined
-  - ansible_selinux.status == 'enabled'
+- include_tasks: upgrade/config_changes.yml
 
 # Restart all services
 - include_tasks: upgrade/restart.yml
@@ -90,6 +49,7 @@
   retries: 24
   delay: 5
 
+- include_tasks: dnsmasq_install.yml
 - include_tasks: dnsmasq.yml
 
 - meta: flush_handlers

+ 77 - 0
roles/openshift_node/tasks/upgrade/config_changes.yml

@@ -0,0 +1,77 @@
+---
+- name: Update systemd units
+  include_tasks: ../systemd_units.yml
+  when: openshift.common.is_containerized
+
+- name: Update oreg value
+  yedit:
+    src: "{{ openshift.common.config_base }}/node/node-config.yaml"
+    key: 'imageConfig.format'
+    value: "{{ oreg_url | default(oreg_url_node) }}"
+  when: oreg_url is defined or oreg_url_node is defined
+
+- name: Remove obsolete docker-sdn-ovs.conf
+  file:
+    path: "/etc/systemd/system/docker.service.d/docker-sdn-ovs.conf"
+    state: absent
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=1513054
+- name: Clean up dockershim data
+  file:
+    path: "/var/lib/dockershim/sandbox/"
+    state: absent
+
+# Disable Swap Block (pre)
+- block:
+  - name: Remove swap entries from /etc/fstab
+    replace:
+      dest: /etc/fstab
+      regexp: '(^[^#].*swap.*)'
+      replace: '# \1'
+      backup: yes
+
+  - name: Add notice about disabling swap
+    lineinfile:
+      dest: /etc/fstab
+      line: '# OpenShift-Ansible Installer disabled swap per overcommit guidelines'
+      state: present
+
+  - name: Disable swap
+    command: swapoff --all
+
+  when:
+  - openshift_node_upgrade_swap_result | default(False) | bool
+  - openshift_disable_swap | default(true) | bool
+# End Disable Swap Block
+
+- name: Apply 3.6 dns config changes
+  yedit:
+    src: /etc/origin/node/node-config.yaml
+    key: "{{ item.key }}"
+    value: "{{ item.value }}"
+  with_items:
+  - key: "dnsBindAddress"
+    value: "127.0.0.1:53"
+  - key: "dnsRecursiveResolvConf"
+    value: "/etc/origin/node/resolv.conf"
+
+- name: Install Node service file
+  template:
+    dest: "/etc/systemd/system/{{ openshift_service_type }}-node.service"
+    src: "node.service.j2"
+  register: l_node_unit
+
+- name: Reset selinux context
+  command: restorecon -RF {{ openshift_node_data_dir }}/openshift.local.volumes
+  when:
+  - ansible_selinux is defined
+  - ansible_selinux.status == 'enabled'
+
+# NOTE: This is needed to make sure we are using the correct set
+#       of systemd unit files. The RPMs lay down defaults but
+#       the install/upgrade may override them in /etc/systemd/system/.
+# NOTE: We don't use the systemd module as some versions of the module
+#       require a service to be part of the call.
+- name: Reload systemd units
+  command: systemctl daemon-reload
+  when: l_node_unit | changed

+ 0 - 3
roles/openshift_node/tasks/upgrade/containerized_node_upgrade.yml

@@ -1,3 +0,0 @@
----
-- name: Update systemd units
-  include_tasks: ../systemd_units.yml

+ 15 - 0
roles/openshift_node/tasks/upgrade/containerized_upgrade_pull.yml

@@ -0,0 +1,15 @@
+---
+- name: Pre-pull node image
+  command: >
+    docker pull {{ openshift.node.node_image }}:{{ openshift_image_tag }}
+  register: pull_result
+  changed_when: "'Downloaded newer image' in pull_result.stdout"
+
+- name: Pre-pull openvswitch image
+  command: >
+    docker pull {{ openshift.node.ovs_image }}:{{ openshift_image_tag }}
+  register: pull_result
+  changed_when: "'Downloaded newer image' in pull_result.stdout"
+  when: openshift_use_openshift_sdn | bool
+
+- include_tasks: ../container_images.yml

+ 12 - 21
roles/openshift_node/tasks/upgrade/rpm_upgrade.yml

@@ -5,29 +5,20 @@
 # - openshift_pkg_version
 # - openshift.common.is_atomic
 
-# We verified latest rpm available is suitable, so just yum update.
-- name: Upgrade packages
-  package: "name={{ openshift_service_type }}-{{ component }}{{ openshift_pkg_version }} state=present"
+# Pre-pull new node rpm, but don't install
+- name: download new node packages
+  command: "{{ ansible_pkg_mgr }} install -y --downloadonly {{ openshift_node_upgrade_rpm_list | join(' ')}}"
   register: result
   until: result | success
+  vars:
+    openshift_node_upgrade_rpm_list:
+      - "{{ openshift_service_type }}-node{{ openshift_pkg_version }}"
+      - "PyYAML"
+      - "dnsmasq"
 
-- name: Ensure python-yaml present for config upgrade
-  package: name=PyYAML state=present
-  when: not openshift.common.is_atomic | bool
+# Pre-pull the rpms for openvswitch, but don't install
+# openvswitch requires the latest version to be installed.
+- name: download openvswitch upgrade rpm
+  command: "{{ ansible_pkg_mgr }} update -y --downloadonly openvswitch"
   register: result
   until: result | success
-
-- name: Install Node service file
-  template:
-    dest: "/etc/systemd/system/{{ openshift_service_type }}-node.service"
-    src: "node.service.j2"
-  register: l_node_unit
-
-# NOTE: This is needed to make sure we are using the correct set
-#       of systemd unit files. The RPMs lay down defaults but
-#       the install/upgrade may override them in /etc/systemd/system/.
-# NOTE: We don't use the systemd module as some versions of the module
-#       require a service to be part of the call.
-- name: Reload systemd units
-  command: systemctl daemon-reload
-  when: l_node_unit | changed

+ 19 - 0
roles/openshift_node/tasks/upgrade/rpm_upgrade_install.yml

@@ -0,0 +1,19 @@
+---
+# input variables:
+# - openshift_service_type
+# - component
+# - openshift_pkg_version
+# - openshift.common.is_atomic
+
+# Install the pre-pulled RPM
+# Note: dnsmasq is covered in it's own play.  openvswitch is included here
+# because once we have the latest rpm downloaded, it will happily be installed.
+- name: download new node packages
+  command: "{{ ansible_pkg_mgr }} install -C -y {{ openshift_node_upgrade_rpm_list | join(' ')}}"
+  register: result
+  until: result | success
+  vars:
+    openshift_node_upgrade_rpm_list:
+      - "{{ openshift_service_type }}-node{{ openshift_pkg_version }}"
+      - "PyYAML"
+      - "openvswitch"

+ 43 - 0
roles/openshift_node/tasks/upgrade/stop_services.yml

@@ -0,0 +1,43 @@
+---
+- name: Stop node and openvswitch services
+  service:
+    name: "{{ item }}"
+    state: stopped
+  with_items:
+  - "{{ openshift_service_type }}-node"
+  - openvswitch
+  failed_when: false
+
+- name: Ensure containerized services stopped before Docker restart
+  service:
+    name: "{{ item }}"
+    state: stopped
+  with_items:
+  - etcd_container
+  - openvswitch
+  - "{{ openshift_service_type }}-master-api"
+  - "{{ openshift_service_type }}-master-controllers"
+  - "{{ openshift_service_type }}-node"
+  failed_when: false
+  when: openshift.common.is_containerized | bool
+
+- service:
+    name: docker
+    state: stopped
+  register: l_openshift_node_upgrade_docker_stop_result
+  until: not l_openshift_node_upgrade_docker_stop_result | failed
+  retries: 3
+  delay: 30
+  when:
+  - l_docker_upgrade is defined
+  - l_docker_upgrade | bool
+
+- name: Stop rpm based services
+  service:
+    name: "{{ item }}"
+    state: stopped
+  with_items:
+  - "{{ openshift_service_type }}-node"
+  - openvswitch
+  failed_when: false
+  when: not openshift.common.is_containerized | bool

+ 12 - 74
roles/openshift_node/tasks/upgrade_pre.yml

@@ -7,6 +7,12 @@
 
 - include_tasks: registry_auth.yml
 
+- name: update package meta data to speed install later.
+  command: "{{ ansible_pkg_mgr }} makecache"
+  register: result
+  until: result | success
+  when: not openshift.common.is_containerized | bool
+
 - name: Check Docker image count
   shell: "docker images -aq | wc -l"
   register: docker_image_count
@@ -19,59 +25,23 @@
   - l_docker_upgrade is defined
   - l_docker_upgrade | bool
 
-- name: Upgrade Docker
-  package: name=docker{{ '-' + docker_version }} state=present
+- include_tasks: upgrade/containerized_upgrade_pull.yml
+  when: openshift.common.is_containerized | bool
+
+# Prepull the rpms for docker upgrade, but don't install
+- name: download docker upgrade rpm
+  command: "{{ ansible_pkg_mgr }} install -y --downloadonly docker{{ '-' + docker_version }}"
   register: result
   until: result | success
   when:
   - l_docker_upgrade is defined
   - l_docker_upgrade | bool
 
-- name: Pre-pull node image
-  command: >
-    docker pull {{ openshift.node.node_image }}:{{ openshift_image_tag }}
-  register: pull_result
-  changed_when: "'Downloaded newer image' in pull_result.stdout"
-  when: openshift.common.is_containerized | bool
-
-- name: Pre-pull openvswitch image
-  command: >
-    docker pull {{ openshift.node.ovs_image }}:{{ openshift_image_tag }}
-  register: pull_result
-  changed_when: "'Downloaded newer image' in pull_result.stdout"
-  when:
-  - openshift.common.is_containerized | bool
-  - openshift_use_openshift_sdn | bool
-
 - include_tasks: upgrade/rpm_upgrade.yml
   vars:
-    component: "node"
     openshift_version: "{{ openshift_pkg_version | default('') }}"
   when: not openshift.common.is_containerized | bool
 
-- name: Remove obsolete docker-sdn-ovs.conf
-  file:
-    path: "/etc/systemd/system/docker.service.d/docker-sdn-ovs.conf"
-    state: absent
-
-- include_tasks: upgrade/containerized_node_upgrade.yml
-  when: openshift.common.is_containerized | bool
-
-- name: Upgrade openvswitch
-  package:
-    name: openvswitch
-    state: latest
-  when: not openshift.common.is_containerized | bool
-  register: result
-  until: result | success
-
-- name: Update oreg value
-  yedit:
-    src: "{{ openshift.common.config_base }}/node/node-config.yaml"
-    key: 'imageConfig.format'
-    value: "{{ oreg_url | default(oreg_url_node) }}"
-  when: oreg_url is defined or oreg_url_node is defined
-
 # https://docs.openshift.com/container-platform/3.4/admin_guide/overcommit.html#disabling-swap-memory
 - name: Check for swap usage
   command: grep "^[^#].*swap" /etc/fstab
@@ -84,35 +54,3 @@
 - name: set_fact swap_result
   set_fact:
     openshift_node_upgrade_swap_result: "{{ swap_result.stdout_lines | length > 0 | bool }}"
-
-# Disable Swap Block (pre)
-- block:
-  - name: Remove swap entries from /etc/fstab
-    replace:
-      dest: /etc/fstab
-      regexp: '(^[^#].*swap.*)'
-      replace: '# \1'
-      backup: yes
-
-  - name: Add notice about disabling swap
-    lineinfile:
-      dest: /etc/fstab
-      line: '# OpenShift-Ansible Installer disabled swap per overcommit guidelines'
-      state: present
-  when:
-  - openshift_node_upgrade_swap_result | default(False) | bool
-  - openshift_disable_swap | default(true) | bool
-  # End Disable Swap Block
-
-- name: Apply 3.6 dns config changes
-  yedit:
-    src: /etc/origin/node/node-config.yaml
-    key: "{{ item.key }}"
-    value: "{{ item.value }}"
-  with_items:
-  - key: "dnsBindAddress"
-    value: "127.0.0.1:53"
-  - key: "dnsRecursiveResolvConf"
-    value: "/etc/origin/node/resolv.conf"
-
-- include_tasks: dnsmasq_install.yml