~chris.macnaughton/charm-helpers/charm-helpers

« back to all changes in this revision

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

  • Committer: David Ames
  • Date: 2017-07-24 20:18:56 UTC
  • mfrom: (767.1.3 charm-helpers)
  • Revision ID: david.ames@canonical.com-20170724201856-lo1otmq1cn8cmjok
[thedac, r=petevg] Charm snap helper updates

Use track/channel
Determine installed version of snap
Support snap upgrades

Show diffs side-by-side

added added

removed removed

Lines of Context:
94
94
 
95
95
from charmhelpers.fetch.snap import (
96
96
    snap_install,
 
97
    snap_refresh,
97
98
    SNAP_CHANNELS,
98
99
)
99
100
 
408
409
    '''Derive OpenStack release codename from an installed package.'''
409
410
 
410
411
    if snap_install_requested():
411
 
        return None
 
412
        cmd = ['snap', 'list', package]
 
413
        try:
 
414
            out = subprocess.check_output(cmd)
 
415
        except subprocess.CalledProcessError as e:
 
416
            return None
 
417
        lines = out.split('\n')
 
418
        for line in lines:
 
419
            if package in line:
 
420
                # Second item in list is Version
 
421
                return line.split()[1]
412
422
 
413
423
    import apt_pkg as apt
414
424
 
623
633
                         a newer version of package.
624
634
    """
625
635
 
626
 
    # TODO make upgrades snap aware
627
 
    if snap_install_requested():
628
 
        return False
629
 
 
630
636
    import apt_pkg as apt
631
637
    src = config('openstack-origin')
632
638
    cur_vers = get_os_version_package(package)
 
639
    if not cur_vers:
 
640
        # The package has not been installed yet do not attempt upgrade
 
641
        return False
633
642
    if "swift" in package:
634
643
        codename = get_os_codename_install_source(src)
635
644
        avail_vers = get_os_version_codename_swift(codename)
2058
2067
 
2059
2068
    @param snaps: List of snaps
2060
2069
    @param src: String of openstack-origin or source of the form
2061
 
        snap:channel-series-release
 
2070
        snap:channel-series-track
2062
2071
    @param mode: String classic, devmode or jailmode
2063
2072
    @returns: Dictionary of snaps with channels and modes
2064
2073
    """
2068
2077
        return {}
2069
2078
 
2070
2079
    _src = src[5:]
2071
 
    channel, series, release = _src.split('-')
 
2080
    _channel, _series, _release = _src.split('-')
 
2081
    channel = '--channel={}/{}'.format(_release, _channel)
2072
2082
 
2073
2083
    return {snap: {'channel': channel, 'mode': mode}
2074
2084
            for snap in snaps}
2075
2085
 
2076
2086
 
2077
 
def install_os_snaps(snaps):
 
2087
def install_os_snaps(snaps, refresh=False):
2078
2088
    """Install OpenStack snaps from channel and with mode
2079
2089
 
2080
2090
    @param snaps: Dictionary of snaps with channels and modes of the form:
2091
2101
            return flag
2092
2102
        return '--{}'.format(flag)
2093
2103
 
2094
 
    for snap in snaps.keys():
2095
 
        snap_install(snap,
2096
 
                     _ensure_flag(snaps[snap]['channel']),
2097
 
                     _ensure_flag(snaps[snap]['mode']))
 
2104
    if refresh:
 
2105
        for snap in snaps.keys():
 
2106
            snap_refresh(snap,
 
2107
                         _ensure_flag(snaps[snap]['channel']),
 
2108
                         _ensure_flag(snaps[snap]['mode']))
 
2109
    else:
 
2110
        for snap in snaps.keys():
 
2111
            snap_install(snap,
 
2112
                         _ensure_flag(snaps[snap]['channel']),
 
2113
                         _ensure_flag(snaps[snap]['mode']))