charmhelpers sync to fix py3 contexts
Change-Id: Ibf6c49aef5127eb824ea671089cb56cf7789dc32
This commit is contained in:
parent
b63f8687f9
commit
ec4a06057f
@ -90,6 +90,6 @@ def install_ca_cert(ca_cert):
|
|||||||
log("CA cert is the same as installed version", level=INFO)
|
log("CA cert is the same as installed version", level=INFO)
|
||||||
else:
|
else:
|
||||||
log("Installing new CA cert", level=INFO)
|
log("Installing new CA cert", level=INFO)
|
||||||
with open(cert_file, 'w') as crt:
|
with open(cert_file, 'wb') as crt:
|
||||||
crt.write(ca_cert)
|
crt.write(ca_cert)
|
||||||
subprocess.check_call(['update-ca-certificates', '--fresh'])
|
subprocess.check_call(['update-ca-certificates', '--fresh'])
|
||||||
|
@ -250,7 +250,14 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
self.log.debug('Waiting up to {}s for extended status on services: '
|
self.log.debug('Waiting up to {}s for extended status on services: '
|
||||||
'{}'.format(timeout, services))
|
'{}'.format(timeout, services))
|
||||||
service_messages = {service: message for service in services}
|
service_messages = {service: message for service in services}
|
||||||
|
|
||||||
|
# Check for idleness
|
||||||
|
self.d.sentry.wait()
|
||||||
|
# Check for error states and bail early
|
||||||
|
self.d.sentry.wait_for_status(self.d.juju_env, services)
|
||||||
|
# Check for ready messages
|
||||||
self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
|
self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
|
||||||
|
|
||||||
self.log.info('OK')
|
self.log.info('OK')
|
||||||
|
|
||||||
def _get_openstack_release(self):
|
def _get_openstack_release(self):
|
||||||
@ -263,7 +270,8 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
(self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty,
|
(self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty,
|
||||||
self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton,
|
self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton,
|
||||||
self.yakkety_newton, self.xenial_ocata, self.zesty_ocata,
|
self.yakkety_newton, self.xenial_ocata, self.zesty_ocata,
|
||||||
self.xenial_pike, self.artful_pike) = range(11)
|
self.xenial_pike, self.artful_pike, self.xenial_queens,
|
||||||
|
self.bionic_queens,) = range(13)
|
||||||
|
|
||||||
releases = {
|
releases = {
|
||||||
('trusty', None): self.trusty_icehouse,
|
('trusty', None): self.trusty_icehouse,
|
||||||
@ -274,9 +282,11 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
('xenial', 'cloud:xenial-newton'): self.xenial_newton,
|
('xenial', 'cloud:xenial-newton'): self.xenial_newton,
|
||||||
('xenial', 'cloud:xenial-ocata'): self.xenial_ocata,
|
('xenial', 'cloud:xenial-ocata'): self.xenial_ocata,
|
||||||
('xenial', 'cloud:xenial-pike'): self.xenial_pike,
|
('xenial', 'cloud:xenial-pike'): self.xenial_pike,
|
||||||
|
('xenial', 'cloud:xenial-queens'): self.xenial_queens,
|
||||||
('yakkety', None): self.yakkety_newton,
|
('yakkety', None): self.yakkety_newton,
|
||||||
('zesty', None): self.zesty_ocata,
|
('zesty', None): self.zesty_ocata,
|
||||||
('artful', None): self.artful_pike,
|
('artful', None): self.artful_pike,
|
||||||
|
('bionic', None): self.bionic_queens,
|
||||||
}
|
}
|
||||||
return releases[(self.series, self.openstack)]
|
return releases[(self.series, self.openstack)]
|
||||||
|
|
||||||
@ -291,6 +301,7 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
('yakkety', 'newton'),
|
('yakkety', 'newton'),
|
||||||
('zesty', 'ocata'),
|
('zesty', 'ocata'),
|
||||||
('artful', 'pike'),
|
('artful', 'pike'),
|
||||||
|
('bionic', 'queens'),
|
||||||
])
|
])
|
||||||
if self.openstack:
|
if self.openstack:
|
||||||
os_origin = self.openstack.split(':')[1]
|
os_origin = self.openstack.split(':')[1]
|
||||||
@ -303,8 +314,8 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
test scenario, based on OpenStack release and whether ceph radosgw
|
test scenario, based on OpenStack release and whether ceph radosgw
|
||||||
is flagged as present or not."""
|
is flagged as present or not."""
|
||||||
|
|
||||||
if self._get_openstack_release() <= self.trusty_juno:
|
if self._get_openstack_release() == self.trusty_icehouse:
|
||||||
# Juno or earlier
|
# Icehouse
|
||||||
pools = [
|
pools = [
|
||||||
'data',
|
'data',
|
||||||
'metadata',
|
'metadata',
|
||||||
@ -312,7 +323,7 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
'cinder-ceph',
|
'cinder-ceph',
|
||||||
'glance'
|
'glance'
|
||||||
]
|
]
|
||||||
elif (self.trust_kilo <= self._get_openstack_release() <=
|
elif (self.trusty_kilo <= self._get_openstack_release() <=
|
||||||
self.zesty_ocata):
|
self.zesty_ocata):
|
||||||
# Kilo through Ocata
|
# Kilo through Ocata
|
||||||
pools = [
|
pools = [
|
||||||
|
@ -43,7 +43,6 @@ import swiftclient
|
|||||||
from charmhelpers.contrib.amulet.utils import (
|
from charmhelpers.contrib.amulet.utils import (
|
||||||
AmuletUtils
|
AmuletUtils
|
||||||
)
|
)
|
||||||
from charmhelpers.core.decorators import retry_on_exception
|
|
||||||
from charmhelpers.core.host import CompareHostReleases
|
from charmhelpers.core.host import CompareHostReleases
|
||||||
|
|
||||||
DEBUG = logging.DEBUG
|
DEBUG = logging.DEBUG
|
||||||
@ -311,7 +310,6 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
self.log.debug('Checking if tenant exists ({})...'.format(tenant))
|
self.log.debug('Checking if tenant exists ({})...'.format(tenant))
|
||||||
return tenant in [t.name for t in keystone.tenants.list()]
|
return tenant in [t.name for t in keystone.tenants.list()]
|
||||||
|
|
||||||
@retry_on_exception(5, base_delay=10)
|
|
||||||
def keystone_wait_for_propagation(self, sentry_relation_pairs,
|
def keystone_wait_for_propagation(self, sentry_relation_pairs,
|
||||||
api_version):
|
api_version):
|
||||||
"""Iterate over list of sentry and relation tuples and verify that
|
"""Iterate over list of sentry and relation tuples and verify that
|
||||||
@ -327,7 +325,7 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
rel = sentry.relation('identity-service',
|
rel = sentry.relation('identity-service',
|
||||||
relation_name)
|
relation_name)
|
||||||
self.log.debug('keystone relation data: {}'.format(rel))
|
self.log.debug('keystone relation data: {}'.format(rel))
|
||||||
if rel['api_version'] != str(api_version):
|
if rel.get('api_version') != str(api_version):
|
||||||
raise Exception("api_version not propagated through relation"
|
raise Exception("api_version not propagated through relation"
|
||||||
" data yet ('{}' != '{}')."
|
" data yet ('{}' != '{}')."
|
||||||
"".format(rel['api_version'], api_version))
|
"".format(rel['api_version'], api_version))
|
||||||
@ -349,6 +347,7 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
|
|
||||||
config = {'preferred-api-version': api_version}
|
config = {'preferred-api-version': api_version}
|
||||||
deployment.d.configure('keystone', config)
|
deployment.d.configure('keystone', config)
|
||||||
|
deployment._auto_wait_for_status()
|
||||||
self.keystone_wait_for_propagation(sentry_relation_pairs, api_version)
|
self.keystone_wait_for_propagation(sentry_relation_pairs, api_version)
|
||||||
|
|
||||||
def authenticate_cinder_admin(self, keystone_sentry, username,
|
def authenticate_cinder_admin(self, keystone_sentry, username,
|
||||||
|
@ -293,7 +293,7 @@ class PostgresqlDBContext(OSContextGenerator):
|
|||||||
def db_ssl(rdata, ctxt, ssl_dir):
|
def db_ssl(rdata, ctxt, ssl_dir):
|
||||||
if 'ssl_ca' in rdata and ssl_dir:
|
if 'ssl_ca' in rdata and ssl_dir:
|
||||||
ca_path = os.path.join(ssl_dir, 'db-client.ca')
|
ca_path = os.path.join(ssl_dir, 'db-client.ca')
|
||||||
with open(ca_path, 'w') as fh:
|
with open(ca_path, 'wb') as fh:
|
||||||
fh.write(b64decode(rdata['ssl_ca']))
|
fh.write(b64decode(rdata['ssl_ca']))
|
||||||
|
|
||||||
ctxt['database_ssl_ca'] = ca_path
|
ctxt['database_ssl_ca'] = ca_path
|
||||||
@ -308,12 +308,12 @@ def db_ssl(rdata, ctxt, ssl_dir):
|
|||||||
log("Waiting 1m for ssl client cert validity", level=INFO)
|
log("Waiting 1m for ssl client cert validity", level=INFO)
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
|
|
||||||
with open(cert_path, 'w') as fh:
|
with open(cert_path, 'wb') as fh:
|
||||||
fh.write(b64decode(rdata['ssl_cert']))
|
fh.write(b64decode(rdata['ssl_cert']))
|
||||||
|
|
||||||
ctxt['database_ssl_cert'] = cert_path
|
ctxt['database_ssl_cert'] = cert_path
|
||||||
key_path = os.path.join(ssl_dir, 'db-client.key')
|
key_path = os.path.join(ssl_dir, 'db-client.key')
|
||||||
with open(key_path, 'w') as fh:
|
with open(key_path, 'wb') as fh:
|
||||||
fh.write(b64decode(rdata['ssl_key']))
|
fh.write(b64decode(rdata['ssl_key']))
|
||||||
|
|
||||||
ctxt['database_ssl_key'] = key_path
|
ctxt['database_ssl_key'] = key_path
|
||||||
@ -459,7 +459,7 @@ class AMQPContext(OSContextGenerator):
|
|||||||
|
|
||||||
ca_path = os.path.join(
|
ca_path = os.path.join(
|
||||||
self.ssl_dir, 'rabbit-client-ca.pem')
|
self.ssl_dir, 'rabbit-client-ca.pem')
|
||||||
with open(ca_path, 'w') as fh:
|
with open(ca_path, 'wb') as fh:
|
||||||
fh.write(b64decode(ctxt['rabbit_ssl_ca']))
|
fh.write(b64decode(ctxt['rabbit_ssl_ca']))
|
||||||
ctxt['rabbit_ssl_ca'] = ca_path
|
ctxt['rabbit_ssl_ca'] = ca_path
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ rbd default features = {{ rbd_features }}
|
|||||||
|
|
||||||
[client]
|
[client]
|
||||||
{% if rbd_client_cache_settings -%}
|
{% if rbd_client_cache_settings -%}
|
||||||
{% for key, value in rbd_client_cache_settings.iteritems() -%}
|
{% for key, value in rbd_client_cache_settings.items() -%}
|
||||||
{{ key }} = {{ value }}
|
{{ key }} = {{ value }}
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
{%- endif %}
|
{%- endif %}
|
@ -140,6 +140,7 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([
|
|||||||
('yakkety', 'newton'),
|
('yakkety', 'newton'),
|
||||||
('zesty', 'ocata'),
|
('zesty', 'ocata'),
|
||||||
('artful', 'pike'),
|
('artful', 'pike'),
|
||||||
|
('bionic', 'queens'),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -157,6 +158,7 @@ OPENSTACK_CODENAMES = OrderedDict([
|
|||||||
('2016.2', 'newton'),
|
('2016.2', 'newton'),
|
||||||
('2017.1', 'ocata'),
|
('2017.1', 'ocata'),
|
||||||
('2017.2', 'pike'),
|
('2017.2', 'pike'),
|
||||||
|
('2018.1', 'queens'),
|
||||||
])
|
])
|
||||||
|
|
||||||
# The ugly duckling - must list releases oldest to newest
|
# The ugly duckling - must list releases oldest to newest
|
||||||
@ -187,6 +189,8 @@ SWIFT_CODENAMES = OrderedDict([
|
|||||||
['2.11.0', '2.12.0', '2.13.0']),
|
['2.11.0', '2.12.0', '2.13.0']),
|
||||||
('pike',
|
('pike',
|
||||||
['2.13.0', '2.15.0']),
|
['2.13.0', '2.15.0']),
|
||||||
|
('queens',
|
||||||
|
['2.16.0']),
|
||||||
])
|
])
|
||||||
|
|
||||||
# >= Liberty version->codename mapping
|
# >= Liberty version->codename mapping
|
||||||
@ -412,6 +416,8 @@ def get_os_codename_package(package, fatal=True):
|
|||||||
cmd = ['snap', 'list', package]
|
cmd = ['snap', 'list', package]
|
||||||
try:
|
try:
|
||||||
out = subprocess.check_output(cmd)
|
out = subprocess.check_output(cmd)
|
||||||
|
if six.PY3:
|
||||||
|
out = out.decode('UTF-8')
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
return None
|
return None
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
|
@ -61,13 +61,19 @@ def bytes_from_string(value):
|
|||||||
if isinstance(value, six.string_types):
|
if isinstance(value, six.string_types):
|
||||||
value = six.text_type(value)
|
value = six.text_type(value)
|
||||||
else:
|
else:
|
||||||
msg = "Unable to interpret non-string value '%s' as boolean" % (value)
|
msg = "Unable to interpret non-string value '%s' as bytes" % (value)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
matches = re.match("([0-9]+)([a-zA-Z]+)", value)
|
matches = re.match("([0-9]+)([a-zA-Z]+)", value)
|
||||||
if not matches:
|
if matches:
|
||||||
|
size = int(matches.group(1)) * (1024 ** BYTE_POWER[matches.group(2)])
|
||||||
|
else:
|
||||||
|
# Assume that value passed in is bytes
|
||||||
|
try:
|
||||||
|
size = int(value)
|
||||||
|
except ValueError:
|
||||||
msg = "Unable to interpret string value '%s' as bytes" % (value)
|
msg = "Unable to interpret string value '%s' as bytes" % (value)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
return int(matches.group(1)) * (1024 ** BYTE_POWER[matches.group(2)])
|
return size
|
||||||
|
|
||||||
|
|
||||||
class BasicStringComparator(object):
|
class BasicStringComparator(object):
|
||||||
|
@ -250,7 +250,14 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
self.log.debug('Waiting up to {}s for extended status on services: '
|
self.log.debug('Waiting up to {}s for extended status on services: '
|
||||||
'{}'.format(timeout, services))
|
'{}'.format(timeout, services))
|
||||||
service_messages = {service: message for service in services}
|
service_messages = {service: message for service in services}
|
||||||
|
|
||||||
|
# Check for idleness
|
||||||
|
self.d.sentry.wait()
|
||||||
|
# Check for error states and bail early
|
||||||
|
self.d.sentry.wait_for_status(self.d.juju_env, services)
|
||||||
|
# Check for ready messages
|
||||||
self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
|
self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
|
||||||
|
|
||||||
self.log.info('OK')
|
self.log.info('OK')
|
||||||
|
|
||||||
def _get_openstack_release(self):
|
def _get_openstack_release(self):
|
||||||
@ -263,7 +270,8 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
(self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty,
|
(self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty,
|
||||||
self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton,
|
self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton,
|
||||||
self.yakkety_newton, self.xenial_ocata, self.zesty_ocata,
|
self.yakkety_newton, self.xenial_ocata, self.zesty_ocata,
|
||||||
self.xenial_pike, self.artful_pike) = range(11)
|
self.xenial_pike, self.artful_pike, self.xenial_queens,
|
||||||
|
self.bionic_queens,) = range(13)
|
||||||
|
|
||||||
releases = {
|
releases = {
|
||||||
('trusty', None): self.trusty_icehouse,
|
('trusty', None): self.trusty_icehouse,
|
||||||
@ -274,9 +282,11 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
('xenial', 'cloud:xenial-newton'): self.xenial_newton,
|
('xenial', 'cloud:xenial-newton'): self.xenial_newton,
|
||||||
('xenial', 'cloud:xenial-ocata'): self.xenial_ocata,
|
('xenial', 'cloud:xenial-ocata'): self.xenial_ocata,
|
||||||
('xenial', 'cloud:xenial-pike'): self.xenial_pike,
|
('xenial', 'cloud:xenial-pike'): self.xenial_pike,
|
||||||
|
('xenial', 'cloud:xenial-queens'): self.xenial_queens,
|
||||||
('yakkety', None): self.yakkety_newton,
|
('yakkety', None): self.yakkety_newton,
|
||||||
('zesty', None): self.zesty_ocata,
|
('zesty', None): self.zesty_ocata,
|
||||||
('artful', None): self.artful_pike,
|
('artful', None): self.artful_pike,
|
||||||
|
('bionic', None): self.bionic_queens,
|
||||||
}
|
}
|
||||||
return releases[(self.series, self.openstack)]
|
return releases[(self.series, self.openstack)]
|
||||||
|
|
||||||
@ -291,6 +301,7 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
('yakkety', 'newton'),
|
('yakkety', 'newton'),
|
||||||
('zesty', 'ocata'),
|
('zesty', 'ocata'),
|
||||||
('artful', 'pike'),
|
('artful', 'pike'),
|
||||||
|
('bionic', 'queens'),
|
||||||
])
|
])
|
||||||
if self.openstack:
|
if self.openstack:
|
||||||
os_origin = self.openstack.split(':')[1]
|
os_origin = self.openstack.split(':')[1]
|
||||||
@ -303,8 +314,8 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
test scenario, based on OpenStack release and whether ceph radosgw
|
test scenario, based on OpenStack release and whether ceph radosgw
|
||||||
is flagged as present or not."""
|
is flagged as present or not."""
|
||||||
|
|
||||||
if self._get_openstack_release() <= self.trusty_juno:
|
if self._get_openstack_release() == self.trusty_icehouse:
|
||||||
# Juno or earlier
|
# Icehouse
|
||||||
pools = [
|
pools = [
|
||||||
'data',
|
'data',
|
||||||
'metadata',
|
'metadata',
|
||||||
@ -312,7 +323,7 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||||||
'cinder-ceph',
|
'cinder-ceph',
|
||||||
'glance'
|
'glance'
|
||||||
]
|
]
|
||||||
elif (self.trust_kilo <= self._get_openstack_release() <=
|
elif (self.trusty_kilo <= self._get_openstack_release() <=
|
||||||
self.zesty_ocata):
|
self.zesty_ocata):
|
||||||
# Kilo through Ocata
|
# Kilo through Ocata
|
||||||
pools = [
|
pools = [
|
||||||
|
@ -43,7 +43,6 @@ import swiftclient
|
|||||||
from charmhelpers.contrib.amulet.utils import (
|
from charmhelpers.contrib.amulet.utils import (
|
||||||
AmuletUtils
|
AmuletUtils
|
||||||
)
|
)
|
||||||
from charmhelpers.core.decorators import retry_on_exception
|
|
||||||
from charmhelpers.core.host import CompareHostReleases
|
from charmhelpers.core.host import CompareHostReleases
|
||||||
|
|
||||||
DEBUG = logging.DEBUG
|
DEBUG = logging.DEBUG
|
||||||
@ -311,7 +310,6 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
self.log.debug('Checking if tenant exists ({})...'.format(tenant))
|
self.log.debug('Checking if tenant exists ({})...'.format(tenant))
|
||||||
return tenant in [t.name for t in keystone.tenants.list()]
|
return tenant in [t.name for t in keystone.tenants.list()]
|
||||||
|
|
||||||
@retry_on_exception(5, base_delay=10)
|
|
||||||
def keystone_wait_for_propagation(self, sentry_relation_pairs,
|
def keystone_wait_for_propagation(self, sentry_relation_pairs,
|
||||||
api_version):
|
api_version):
|
||||||
"""Iterate over list of sentry and relation tuples and verify that
|
"""Iterate over list of sentry and relation tuples and verify that
|
||||||
@ -327,7 +325,7 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
rel = sentry.relation('identity-service',
|
rel = sentry.relation('identity-service',
|
||||||
relation_name)
|
relation_name)
|
||||||
self.log.debug('keystone relation data: {}'.format(rel))
|
self.log.debug('keystone relation data: {}'.format(rel))
|
||||||
if rel['api_version'] != str(api_version):
|
if rel.get('api_version') != str(api_version):
|
||||||
raise Exception("api_version not propagated through relation"
|
raise Exception("api_version not propagated through relation"
|
||||||
" data yet ('{}' != '{}')."
|
" data yet ('{}' != '{}')."
|
||||||
"".format(rel['api_version'], api_version))
|
"".format(rel['api_version'], api_version))
|
||||||
@ -349,6 +347,7 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
|
|
||||||
config = {'preferred-api-version': api_version}
|
config = {'preferred-api-version': api_version}
|
||||||
deployment.d.configure('keystone', config)
|
deployment.d.configure('keystone', config)
|
||||||
|
deployment._auto_wait_for_status()
|
||||||
self.keystone_wait_for_propagation(sentry_relation_pairs, api_version)
|
self.keystone_wait_for_propagation(sentry_relation_pairs, api_version)
|
||||||
|
|
||||||
def authenticate_cinder_admin(self, keystone_sentry, username,
|
def authenticate_cinder_admin(self, keystone_sentry, username,
|
||||||
|
@ -140,6 +140,7 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([
|
|||||||
('yakkety', 'newton'),
|
('yakkety', 'newton'),
|
||||||
('zesty', 'ocata'),
|
('zesty', 'ocata'),
|
||||||
('artful', 'pike'),
|
('artful', 'pike'),
|
||||||
|
('bionic', 'queens'),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -157,6 +158,7 @@ OPENSTACK_CODENAMES = OrderedDict([
|
|||||||
('2016.2', 'newton'),
|
('2016.2', 'newton'),
|
||||||
('2017.1', 'ocata'),
|
('2017.1', 'ocata'),
|
||||||
('2017.2', 'pike'),
|
('2017.2', 'pike'),
|
||||||
|
('2018.1', 'queens'),
|
||||||
])
|
])
|
||||||
|
|
||||||
# The ugly duckling - must list releases oldest to newest
|
# The ugly duckling - must list releases oldest to newest
|
||||||
@ -187,6 +189,8 @@ SWIFT_CODENAMES = OrderedDict([
|
|||||||
['2.11.0', '2.12.0', '2.13.0']),
|
['2.11.0', '2.12.0', '2.13.0']),
|
||||||
('pike',
|
('pike',
|
||||||
['2.13.0', '2.15.0']),
|
['2.13.0', '2.15.0']),
|
||||||
|
('queens',
|
||||||
|
['2.16.0']),
|
||||||
])
|
])
|
||||||
|
|
||||||
# >= Liberty version->codename mapping
|
# >= Liberty version->codename mapping
|
||||||
@ -412,6 +416,8 @@ def get_os_codename_package(package, fatal=True):
|
|||||||
cmd = ['snap', 'list', package]
|
cmd = ['snap', 'list', package]
|
||||||
try:
|
try:
|
||||||
out = subprocess.check_output(cmd)
|
out = subprocess.check_output(cmd)
|
||||||
|
if six.PY3:
|
||||||
|
out = out.decode('UTF-8')
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
return None
|
return None
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
|
@ -61,13 +61,19 @@ def bytes_from_string(value):
|
|||||||
if isinstance(value, six.string_types):
|
if isinstance(value, six.string_types):
|
||||||
value = six.text_type(value)
|
value = six.text_type(value)
|
||||||
else:
|
else:
|
||||||
msg = "Unable to interpret non-string value '%s' as boolean" % (value)
|
msg = "Unable to interpret non-string value '%s' as bytes" % (value)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
matches = re.match("([0-9]+)([a-zA-Z]+)", value)
|
matches = re.match("([0-9]+)([a-zA-Z]+)", value)
|
||||||
if not matches:
|
if matches:
|
||||||
|
size = int(matches.group(1)) * (1024 ** BYTE_POWER[matches.group(2)])
|
||||||
|
else:
|
||||||
|
# Assume that value passed in is bytes
|
||||||
|
try:
|
||||||
|
size = int(value)
|
||||||
|
except ValueError:
|
||||||
msg = "Unable to interpret string value '%s' as bytes" % (value)
|
msg = "Unable to interpret string value '%s' as bytes" % (value)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
return int(matches.group(1)) * (1024 ** BYTE_POWER[matches.group(2)])
|
return size
|
||||||
|
|
||||||
|
|
||||||
class BasicStringComparator(object):
|
class BasicStringComparator(object):
|
||||||
|
Loading…
Reference in New Issue
Block a user