X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwcal%2Fplugins%2Fvala%2Frwcal_openstack%2Frift%2Frwcal%2Fopenstack%2Fopenstack_drv.py;h=d6831a73e658b9b6bcee522308e24f6dd621cadd;hb=25df0a991a593e248a6a825193009d307b977169;hp=ffab0147365fcfbecc4af8d2e0c83cbb8d2fbe9b;hpb=9eae504f9fffaa02255241b1d93f6dc4b072926f;p=osm%2FSO.git diff --git a/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/openstack_drv.py b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/openstack_drv.py index ffab0147..d6831a73 100644 --- a/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/openstack_drv.py +++ b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/openstack_drv.py @@ -29,6 +29,7 @@ from . import utils as drv_utils # Exceptions import keystoneclient.exceptions as KeystoneExceptions +import neutronclient.common.exceptions as NeutronException class ValidationError(Exception): @@ -132,10 +133,13 @@ class OpenstackDriver(object): self.glance_drv = gl_drv.GlanceDriver(self.sess_drv, region_name = region, logger = self.log) - - self.cinder_drv = ci_drv.CinderDriver(self.sess_drv, + + try: + self.cinder_drv = ci_drv.CinderDriver(self.sess_drv, region_name = region, logger = self.log) + except Exception: + self.cinder_drv = None self.ceilo_drv = ce_drv.CeilometerDriver(self.sess_drv, region_name = region, @@ -168,7 +172,10 @@ class OpenstackDriver(object): return self._cache['cinder'] def build_resource_cache(self): - self.build_network_resource_cache() + try: + self.build_network_resource_cache() + except KeyError: + raise self.build_nova_resource_cache() self.build_cinder_resource_cache() self.build_glance_resource_cache() @@ -212,19 +219,27 @@ class OpenstackDriver(object): self.log.info("Discovering management network %s", self._mgmt_network) network_list = self._cache_populate(self.neutron_drv.network_get, None, - **{'network_name':self._mgmt_network}) + **{'network_name': self._mgmt_network}) if network_list: self.neutron_cache['mgmt_net'] = network_list['id'] else: - raise KeyError("Error") + msg = "Could not find management network %s" % self._mgmt_network + self.log.error(msg) + raise KeyError(msg) def _build_glance_image_list(self): self.log.info("Discovering images") self.glance_cache['images'] = self._cache_populate(self.glance_image_list, list()) + return self.glance_cache['images'] + def _build_cinder_volume_list(self): + self.log.info("Discovering volumes") + self.cinder_cache['volumes'] = self._cache_populate(self.cinder_volume_list, + list()) + return self.cinder_cache['volumes'] def build_nova_resource_cache(self): self.log.info("Building nova resource cache") @@ -234,13 +249,17 @@ class OpenstackDriver(object): def build_network_resource_cache(self): self.log.info("Building network resource cache") - self._get_neutron_mgmt_network() + try: + self._get_neutron_mgmt_network() + except KeyError: + raise self._build_neutron_security_group_list() self._build_neutron_subnet_prefix_list() def build_cinder_resource_cache(self): - pass - + self.log.info("Building cinder resource cache") + if self.cinder_drv is not None: + self._build_cinder_volume_list() def build_glance_resource_cache(self): self.log.info("Building glance resource cache") @@ -293,27 +312,40 @@ class OpenstackDriver(object): else: return self._build_glance_image_list() + @property + def _cinder_volume_list(self): + if 'volumes' in self.cinder_cache: + return self.cinder_cache['volumes'] + else: + return self._build_cinder_volume_list() + def validate_account_creds(self): try: self.sess_drv.invalidate_auth_token() self.sess_drv.auth_token self.build_resource_cache() + except KeystoneExceptions.Unauthorized as e: + self.log.error("Invalid credentials ") + raise ValidationError("Invalid Credentials: "+ str(e)) except KeystoneExceptions.AuthorizationFailure as e: self.log.error("Unable to authenticate or validate the existing credentials. Exception: %s", str(e)) raise ValidationError("Invalid Credentials: "+ str(e)) + except NeutronException.NotFound as e: + self.log.error("Given management network could not be found for Openstack account ") + raise ValidationError("Neutron network not found "+ str(e)) except Exception as e: self.log.error("Could not connect to Openstack. Exception: %s", str(e)) raise ValidationError("Connection Error: "+ str(e)) - + def glance_image_create(self, **kwargs): - if not 'disk_format' in kwargs: + if 'disk_format' not in kwargs: kwargs['disk_format'] = 'qcow2' - if not 'container_format' in kwargs: + if 'container_format' not in kwargs: kwargs['container_format'] = 'bare' - if not 'min_disk' in kwargs: + if 'min_disk' not in kwargs: kwargs['min_disk'] = 0 - if not 'min_ram' in kwargs: + if 'min_ram' not in kwargs: kwargs['min_ram'] = 0 return self.glance_drv.image_create(**kwargs) @@ -356,7 +388,7 @@ class OpenstackDriver(object): def nova_server_create(self, **kwargs): if 'security_groups' not in kwargs: - kwargs['security_groups'] = [ s['name'] for s in self._nova_security_groups ] + kwargs['security_groups'] = [s['name'] for s in self._nova_security_groups] return self.nova_drv.server_create(**kwargs) def nova_server_add_port(self, server_id, port_id): @@ -410,6 +442,9 @@ class OpenstackDriver(object): def nova_volume_list(self, server_id): return self.nova_drv.volume_list(server_id) + def neutron_extensions_list(self): + return self.neutron_drv.extensions_list() + def neutron_network_list(self): return self.neutron_drv.network_list() @@ -574,7 +609,7 @@ class OpenstackDriver(object): def cinder_volume_list(self): return self.cinder_drv.volume_list() - def cinder_volume_get(self,vol_id): + def cinder_volume_get(self, vol_id): return self.cinder_drv.volume_get(vol_id) def cinder_volume_set_metadata(self, volumeid, metadata):