Example #1
0
 def test_get_subordinate_release_packages(
         self, mock_container_scoped_relation_get):
     rdata = {
         'queens': {
             'snap': {
                 'install': ['q_inst'],
                 'purge': ['q_purg']
             }
         },
         'stein': {
             'deb': {
                 'install': ['s_inst'],
                 'purge': ['s_purg']
             }
         }
     }
     mock_container_scoped_relation_get.return_value = [
         json.dumps(rdata),
         json.dumps(rdata),
     ]
     # None of the subordinate relations have information about rocky or
     # earlier for deb installations
     self.assertEquals(utils.get_subordinate_release_packages('rocky'),
                       utils.SubordinatePackages(set(), set()))
     # Information on most recent earlier release with matching package
     # type will be provided when requesting a release not specifically
     # provided by subordinates
     self.assertEquals(
         utils.get_subordinate_release_packages('rocky',
                                                package_type='snap'),
         utils.SubordinatePackages({'q_inst'}, {'q_purg'}))
     self.assertEquals(utils.get_subordinate_release_packages('train'),
                       utils.SubordinatePackages({'s_inst'}, {'s_purg'}))
     # Confirm operation when each subordinate has different release package
     # information
     rdata2 = copy.deepcopy(rdata)
     rdata2.update(
         {'train': {
             'deb': {
                 'install': ['t_inst'],
                 'purge': ['t_purg']
             }
         }})
     mock_container_scoped_relation_get.return_value = [
         json.dumps(rdata),
         json.dumps(rdata2),
     ]
     self.assertEquals(
         utils.get_subordinate_release_packages('train'),
         utils.SubordinatePackages({'s_inst', 't_inst'},
                                   {'s_purg', 't_purg'}))
     # Confirm operation when one of the subordinate relations does not
     # implement sharing the package information
     mock_container_scoped_relation_get.return_value = [
         json.dumps(rdata),
         None,
     ]
     self.assertEquals(utils.get_subordinate_release_packages('train'),
                       utils.SubordinatePackages({'s_inst'}, {'s_purg'}))
Example #2
0
def determine_packages():
    release = os_release('nova-common')
    cmp_release = CompareOpenStackReleases(release)

    packages = [] + BASE_PACKAGES

    net_manager = network_manager()
    if (net_manager in ['flatmanager', 'flatdhcpmanager']
            and config('multi-host').lower() == 'yes'
            and CompareOpenStackReleases(os_release('nova-common')) < 'ocata'):
        packages.extend(['nova-api', 'nova-network'])

    if relation_ids('ceph'):
        packages.append('ceph-common')

    virt_type = config('virt-type')
    if virt_type == 'ironic' and release < 'victoria':
        # ironic compute driver is part of nova and
        # gets installed along with python3-nova
        # The nova-compute-ironic metapackage that satisfies
        # nova-compute-hypervisor does not exist for versions of
        # OpenStack prior to Victoria. Use nova-compute-vmware,
        # as that package has the least amount of dependencies.
        # We also add python3-ironicclient here. This is a dependency
        # which gets installed by nova-compute-ironic in Victoria and later.
        VIRT_TYPES[virt_type] = ['nova-compute-vmware', 'python3-ironicclient']
    try:
        packages.extend(VIRT_TYPES[virt_type])
    except KeyError:
        log('Unsupported virt-type configured: %s' % virt_type)
        raise
    enable_nova_metadata, _ = nova_metadata_requirement()
    if enable_nova_metadata:
        packages.append('nova-api-metadata')

    packages.extend(determine_packages_arch())

    # LP#1806830 - ensure that multipath packages are installed when
    # use-multipath option is enabled.
    if config('use-multipath'):
        packages.extend(MULTIPATH_PACKAGES)

    if cmp_release >= 'rocky':
        packages = [p for p in packages if not p.startswith('python-')]
        packages.extend(PY3_PACKAGES)
        if filter_missing_packages(['python-ceilometer']):
            packages.append('python3-ceilometer')
        if filter_missing_packages(['python-neutron']):
            packages.append('python3-neutron')
        if filter_missing_packages(['python-neutron-fwaas']):
            packages.append('python3-neutron-fwaas')
        if virt_type == 'lxd':
            packages.append('python3-nova-lxd')

    packages = sorted(
        set(packages).union(get_subordinate_release_packages(release).install))

    return packages
Example #3
0
def determine_purge_packages():
    '''Return a list of packages to purge for the current OS release'''
    release = os_release('nova-common')
    cmp_release = CompareOpenStackReleases(release)
    packages = []
    if cmp_release >= 'rocky':
        packages.extend(PURGE_PACKAGES)
    packages = sorted(
        set(packages).union(get_subordinate_release_packages(release).purge))
    return packages