Resync helpers
This commit is contained in:
parent
1c1c0605e9
commit
c50d1abbc7
@ -1,4 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import urllib
|
||||||
|
|
||||||
import glanceclient.v1.client as glance_client
|
import glanceclient.v1.client as glance_client
|
||||||
import keystoneclient.v2_0 as keystone_client
|
import keystoneclient.v2_0 as keystone_client
|
||||||
@ -149,3 +152,58 @@ class OpenStackAmuletUtils(AmuletUtils):
|
|||||||
endpoint_type='publicURL')
|
endpoint_type='publicURL')
|
||||||
return nova_client.Client(username=user, api_key=password,
|
return nova_client.Client(username=user, api_key=password,
|
||||||
project_id=tenant, auth_url=ep)
|
project_id=tenant, auth_url=ep)
|
||||||
|
|
||||||
|
def create_cirros_image(self, glance, image_name):
|
||||||
|
"""Download the latest cirros image and upload it to glance."""
|
||||||
|
http_proxy = os.getenv('AMULET_HTTP_PROXY')
|
||||||
|
self.log.debug('AMULET_HTTP_PROXY: {}'.format(http_proxy))
|
||||||
|
if http_proxy:
|
||||||
|
proxies = {'http': http_proxy}
|
||||||
|
opener = urllib.FancyURLopener(proxies)
|
||||||
|
else:
|
||||||
|
opener = urllib.FancyURLopener()
|
||||||
|
|
||||||
|
f = opener.open("http://download.cirros-cloud.net/version/released")
|
||||||
|
version = f.read().strip()
|
||||||
|
cirros_img = "tests/cirros-{}-x86_64-disk.img".format(version)
|
||||||
|
|
||||||
|
if not os.path.exists(cirros_img):
|
||||||
|
cirros_url = "http://{}/{}/{}".format("download.cirros-cloud.net",
|
||||||
|
version, cirros_img)
|
||||||
|
opener.retrieve(cirros_url, cirros_img)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
with open(cirros_img) as f:
|
||||||
|
image = glance.images.create(name=image_name, is_public=True,
|
||||||
|
disk_format='qcow2',
|
||||||
|
container_format='bare', data=f)
|
||||||
|
return image
|
||||||
|
|
||||||
|
def delete_image(self, glance, image):
|
||||||
|
"""Delete the specified image."""
|
||||||
|
glance.images.delete(image)
|
||||||
|
|
||||||
|
def create_instance(self, nova, image_name, instance_name, flavor):
|
||||||
|
"""Create the specified instance."""
|
||||||
|
image = nova.images.find(name=image_name)
|
||||||
|
flavor = nova.flavors.find(name=flavor)
|
||||||
|
instance = nova.servers.create(name=instance_name, image=image,
|
||||||
|
flavor=flavor)
|
||||||
|
|
||||||
|
count = 1
|
||||||
|
status = instance.status
|
||||||
|
while status == 'BUILD' and count < 10:
|
||||||
|
time.sleep(5)
|
||||||
|
instance = nova.servers.get(instance.id)
|
||||||
|
status = instance.status
|
||||||
|
self.log.debug('instance status: {}'.format(status))
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
if status == 'BUILD':
|
||||||
|
return None
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
||||||
|
def delete_instance(self, nova, instance):
|
||||||
|
"""Delete the specified instance."""
|
||||||
|
nova.servers.delete(instance)
|
||||||
|
@ -243,23 +243,31 @@ class IdentityServiceContext(OSContextGenerator):
|
|||||||
|
|
||||||
|
|
||||||
class AMQPContext(OSContextGenerator):
|
class AMQPContext(OSContextGenerator):
|
||||||
interfaces = ['amqp']
|
|
||||||
|
|
||||||
def __init__(self, ssl_dir=None):
|
def __init__(self, ssl_dir=None, rel_name='amqp', relation_prefix=None):
|
||||||
self.ssl_dir = ssl_dir
|
self.ssl_dir = ssl_dir
|
||||||
|
self.rel_name = rel_name
|
||||||
|
self.relation_prefix = relation_prefix
|
||||||
|
self.interfaces = [rel_name]
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
log('Generating template context for amqp')
|
log('Generating template context for amqp')
|
||||||
conf = config()
|
conf = config()
|
||||||
|
user_setting = 'rabbit-user'
|
||||||
|
vhost_setting = 'rabbit-vhost'
|
||||||
|
if self.relation_prefix:
|
||||||
|
user_setting = self.relation_prefix + '-rabbit-user'
|
||||||
|
vhost_setting = self.relation_prefix + '-rabbit-vhost'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
username = conf['rabbit-user']
|
username = conf[user_setting]
|
||||||
vhost = conf['rabbit-vhost']
|
vhost = conf[vhost_setting]
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
log('Could not generate shared_db context. '
|
log('Could not generate shared_db context. '
|
||||||
'Missing required charm config options: %s.' % e)
|
'Missing required charm config options: %s.' % e)
|
||||||
raise OSContextError
|
raise OSContextError
|
||||||
ctxt = {}
|
ctxt = {}
|
||||||
for rid in relation_ids('amqp'):
|
for rid in relation_ids(self.rel_name):
|
||||||
ha_vip_only = False
|
ha_vip_only = False
|
||||||
for unit in related_units(rid):
|
for unit in related_units(rid):
|
||||||
if relation_get('clustered', rid=rid, unit=unit):
|
if relation_get('clustered', rid=rid, unit=unit):
|
||||||
|
@ -84,6 +84,8 @@ def get_os_codename_install_source(src):
|
|||||||
'''Derive OpenStack release codename from a given installation source.'''
|
'''Derive OpenStack release codename from a given installation source.'''
|
||||||
ubuntu_rel = lsb_release()['DISTRIB_CODENAME']
|
ubuntu_rel = lsb_release()['DISTRIB_CODENAME']
|
||||||
rel = ''
|
rel = ''
|
||||||
|
if src is None:
|
||||||
|
return rel
|
||||||
if src in ['distro', 'distro-proposed']:
|
if src in ['distro', 'distro-proposed']:
|
||||||
try:
|
try:
|
||||||
rel = UBUNTU_OPENSTACK_RELEASE[ubuntu_rel]
|
rel = UBUNTU_OPENSTACK_RELEASE[ubuntu_rel]
|
||||||
|
Loading…
Reference in New Issue
Block a user