~openstack-charm-sync/charms/trusty/swift-storage/stable

« back to all changes in this revision

Viewing changes to charmhelpers/contrib/openstack/utils.py

  • Committer: Corey Bryant
  • Date: 2016-01-14 13:44:21 UTC
  • mfrom: (100.1.1 stable.remote)
  • Revision ID: corey.bryant@canonical.com-20160114134421-eagnucohkgiz1g72
[corey.bryant, r=jamespage] Sync charm-helpers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
103
103
    ('2016.1', 'mitaka'),
104
104
])
105
105
 
106
 
# The ugly duckling
 
106
# The ugly duckling - must list releases oldest to newest
107
107
SWIFT_CODENAMES = OrderedDict([
108
 
    ('1.4.3', 'diablo'),
109
 
    ('1.4.8', 'essex'),
110
 
    ('1.7.4', 'folsom'),
111
 
    ('1.8.0', 'grizzly'),
112
 
    ('1.7.7', 'grizzly'),
113
 
    ('1.7.6', 'grizzly'),
114
 
    ('1.10.0', 'havana'),
115
 
    ('1.9.1', 'havana'),
116
 
    ('1.9.0', 'havana'),
117
 
    ('1.13.1', 'icehouse'),
118
 
    ('1.13.0', 'icehouse'),
119
 
    ('1.12.0', 'icehouse'),
120
 
    ('1.11.0', 'icehouse'),
121
 
    ('2.0.0', 'juno'),
122
 
    ('2.1.0', 'juno'),
123
 
    ('2.2.0', 'juno'),
124
 
    ('2.2.1', 'kilo'),
125
 
    ('2.2.2', 'kilo'),
126
 
    ('2.3.0', 'liberty'),
127
 
    ('2.4.0', 'liberty'),
128
 
    ('2.5.0', 'liberty'),
 
108
    ('diablo',   ['1.4.3']),
 
109
    ('essex',    ['1.4.8']),
 
110
    ('folsom',   ['1.7.4']),
 
111
    ('grizzly',  ['1.7.6', '1.7.7', '1.8.0']),
 
112
    ('havana',   ['1.9.0', '1.9.1', '1.10.0']),
 
113
    ('icehouse', ['1.11.0', '1.12.0', '1.13.0', '1.13.1']),
 
114
    ('juno',     ['2.0.0', '2.1.0', '2.2.0']),
 
115
    ('kilo',     ['2.2.1', '2.2.2']),
 
116
    ('liberty',  ['2.3.0', '2.4.0', '2.5.0']),
 
117
    ('mitaka',   ['2.5.0']),
129
118
])
130
119
 
131
120
# >= Liberty version->codename mapping
227
216
    error_out(e)
228
217
 
229
218
 
 
219
def get_os_version_codename_swift(codename):
 
220
    '''Determine OpenStack version number of swift from codename.'''
 
221
    for k, v in six.iteritems(SWIFT_CODENAMES):
 
222
        if k == codename:
 
223
            return v[-1]
 
224
    e = 'Could not derive swift version for '\
 
225
        'codename: %s' % codename
 
226
    error_out(e)
 
227
 
 
228
 
 
229
def get_swift_codename(version):
 
230
    '''Determine OpenStack codename that corresponds to swift version.'''
 
231
    codenames = [k for k, v in six.iteritems(SWIFT_CODENAMES) if version in v]
 
232
    if len(codenames) > 1:
 
233
        # If more than one release codename contains this version we determine
 
234
        # the actual codename based on the highest available install source.
 
235
        for codename in reversed(codenames):
 
236
            releases = UBUNTU_OPENSTACK_RELEASE
 
237
            release = [k for k, v in six.iteritems(releases) if codename in v]
 
238
            ret = subprocess.check_output(['apt-cache', 'policy', 'swift'])
 
239
            if codename in ret or release[0] in ret:
 
240
                return codename
 
241
    elif len(codenames) == 1:
 
242
        return codenames[0]
 
243
    return None
 
244
 
 
245
 
230
246
def get_os_codename_package(package, fatal=True):
231
247
    '''Derive OpenStack release codename from an installed package.'''
232
248
    import apt_pkg as apt
270
286
        # < Liberty co-ordinated project versions
271
287
        try:
272
288
            if 'swift' in pkg.name:
273
 
                return SWIFT_CODENAMES[vers]
 
289
                return get_swift_codename(vers)
274
290
            else:
275
291
                return OPENSTACK_CODENAMES[vers]
276
292
        except KeyError:
289
305
 
290
306
    if 'swift' in pkg:
291
307
        vers_map = SWIFT_CODENAMES
 
308
        for cname, version in six.iteritems(vers_map):
 
309
            if cname == codename:
 
310
                return version[-1]
292
311
    else:
293
312
        vers_map = OPENSTACK_CODENAMES
294
 
 
295
 
    for version, cname in six.iteritems(vers_map):
296
 
        if cname == codename:
297
 
            return version
 
313
        for version, cname in six.iteritems(vers_map):
 
314
            if cname == codename:
 
315
                return version
298
316
    # e = "Could not determine OpenStack version for package: %s" % pkg
299
317
    # error_out(e)
300
318
 
460
478
    cur_vers = get_os_version_package(package)
461
479
    if "swift" in package:
462
480
        codename = get_os_codename_install_source(src)
463
 
        available_vers = get_os_version_codename(codename, SWIFT_CODENAMES)
 
481
        avail_vers = get_os_version_codename_swift(codename)
464
482
    else:
465
 
        available_vers = get_os_version_install_source(src)
 
483
        avail_vers = get_os_version_install_source(src)
466
484
    apt.init()
467
 
    return apt.version_compare(available_vers, cur_vers) == 1
 
485
    if "swift" in package:
 
486
        major_cur_vers = cur_vers.split('.', 1)[0]
 
487
        major_avail_vers = avail_vers.split('.', 1)[0]
 
488
        major_diff = apt.version_compare(major_avail_vers, major_cur_vers)
 
489
        return avail_vers > cur_vers and (major_diff == 1 or major_diff == 0)
 
490
    return apt.version_compare(avail_vers, cur_vers) == 1
468
491
 
469
492
 
470
493
def ensure_block_device(block_device):