소스 검색

Bug 1304150 - Can't upgrade atomic-openshift to specified version

Brenton Leanhardt 9 년 전
부모
커밋
79dbcc69c8

+ 25 - 0
filter_plugins/oo_filters.py

@@ -646,6 +646,30 @@ class FilterModule(object):
                 persistent_volume_claims.append(persistent_volume_claim)
         return persistent_volume_claims
 
+    @staticmethod
+    def oo_31_rpm_rename_conversion(rpms, openshift_version=None):
+        """ Filters a list of 3.0 rpms and return the corresponding 3.1 rpms
+            names with proper version (if provided)
+
+            If 3.1 rpms are passed in they will only be augmented with the
+            correct version.  This is important for hosts that are running both
+            Masters and Nodes.
+        """
+        if not isinstance(rpms, list):
+            raise errors.AnsibleFilterError("failed expects to filter on a list")
+        if openshift_version is not None and not isinstance(openshift_version, basestring):
+            raise errors.AnsibleFilterError("failed expects openshift_version to be a string")
+
+        rpms_31 = []
+        for rpm in rpms:
+            if not 'atomic' in rpm:
+                rpm = rpm.replace("openshift", "atomic-openshift")
+            if openshift_version:
+                rpm = rpm + openshift_version
+            rpms_31.append(rpm)
+
+        return rpms_31
+
     def filters(self):
         """ returns a mapping of filters to methods """
         return {
@@ -671,4 +695,5 @@ class FilterModule(object):
             "oo_openshift_env": self.oo_openshift_env,
             "oo_persistent_volumes": self.oo_persistent_volumes,
             "oo_persistent_volume_claims": self.oo_persistent_volume_claims,
+            "oo_31_rpm_rename_conversion": self.oo_31_rpm_rename_conversion,
         }

+ 12 - 0
playbooks/common/openshift-cluster/upgrades/v3_0_to_v3_1/upgrade.yml

@@ -229,12 +229,19 @@
   hosts: oo_masters_to_config
   vars:
     openshift_version: "{{ openshift_pkg_version | default('') }}"
+  roles:
+  - openshift_facts
   tasks:
   - name: Upgrade to latest available kernel
     action: "{{ ansible_pkg_mgr}} name=kernel state=latest"
 
   - name: Upgrade master packages
     command: "{{ ansible_pkg_mgr}} update -y {{ openshift.common.service_type }}-master{{ openshift_version }}"
+    when: openshift_pkg_version is not defined
+
+  - name: Upgrade packages
+    command: "{{ ansible_pkg_mgr}} install -y {{ openshift.common.installed_variant_rpms | oo_31_rpm_rename_conversion(openshift_version) | join (' ')}}"
+    when: openshift_pkg_version is defined and deployment_type == 'openshift-enterprise'
 
   - name: Ensure python-yaml present for config upgrade
     action: "{{ ansible_pkg_mgr }} name=PyYAML state=present"
@@ -415,6 +422,11 @@
   tasks:
   - name: Upgrade node packages
     command: "{{ ansible_pkg_mgr }} update -y {{ openshift.common.service_type }}-node{{ openshift_version }}"
+    when: openshift_pkg_version is not defined
+
+  - name: Upgrade packages
+    command: "{{ ansible_pkg_mgr}} install -y {{ openshift.common.installed_variant_rpms | oo_31_rpm_rename_conversion(openshift_version) | join (' ')}}"
+    when: openshift_pkg_version is defined and deployment_type == 'openshift-enterprise'
 
   - name: Restart node service
     service: name="{{ openshift.common.service_type }}-node" state=restarted

+ 24 - 0
roles/openshift_facts/library/openshift_facts.py

@@ -1070,6 +1070,28 @@ def set_container_facts_if_unset(facts):
 
     return facts
 
+def set_installed_variant_rpm_facts(facts):
+    """ Set RPM facts of installed variant
+        Args:
+            facts (dict): existing facts
+        Returns:
+            dict: the facts dict updated with installed_variant_rpms
+                          """
+    installed_rpms = []
+    for base_rpm in ['openshift', 'atomic-openshift', 'origin']:
+        optional_rpms = ['master', 'node', 'clients', 'sdn-ovs']
+        variant_rpms = [base_rpm] + \
+                       ['{0}-{1}'.format(base_rpm, r) for r in optional_rpms] + \
+                       ['tuned-profiles-%s-node' % base_rpm]
+        for rpm in variant_rpms:
+            exit_code, _, _ = module.run_command(['rpm', '-q', rpm])
+            if exit_code == 0:
+                installed_rpms.append(rpm)
+
+    facts['common']['installed_variant_rpms'] = installed_rpms
+    return facts
+
+
 
 class OpenShiftFactsInternalError(Exception):
     """Origin Facts Error"""
@@ -1159,6 +1181,8 @@ class OpenShiftFacts(object):
         facts = set_aggregate_facts(facts)
         facts = set_etcd_facts_if_unset(facts)
         facts = set_container_facts_if_unset(facts)
+        if not facts['common']['is_containerized']:
+            facts = set_installed_variant_rpm_facts(facts)
         return dict(openshift=facts)
 
     def get_defaults(self, roles):