+ def _get_openstack_availablity_zones(self):
+ """
+ Get from openstack availability zones available
+ :return:
+ """
+ try:
+ openstack_availability_zone = self.nova.availability_zones.list()
+ openstack_availability_zone = [str(zone.zoneName) for zone in openstack_availability_zone
+ if zone.zoneName != 'internal']
+ return openstack_availability_zone
+ except Exception as e:
+ return None
+
+ def _set_availablity_zones(self):
+ """
+ Set vim availablity zone
+ :return:
+ """
+
+ if 'availability_zone' in self.config:
+ vim_availability_zones = self.config.get('availability_zone')
+ if isinstance(vim_availability_zones, str):
+ self.availability_zone = [vim_availability_zones]
+ elif isinstance(vim_availability_zones, list):
+ self.availability_zone = vim_availability_zones
+ else:
+ self.availability_zone = self._get_openstack_availablity_zones()
+
+ def _get_vm_availavility_zone(self, availavility_zone_index, nfv_availability_zones):
+ """
+ Return a list with all availability zones create during datacenter attach.
+ :return: List with availability zones
+ """
+ openstack_avilability_zone = self.availability_zone
+
+ # check if VIM offer enough availability zones describe in the VNFC
+ if self.availability_zone and availavility_zone_index is not None \
+ and 0 <= len(nfv_availability_zones) <= len(self.availability_zone):
+
+ if nfv_availability_zones:
+ vnf_azone = nfv_availability_zones[availavility_zone_index]
+ zones_available = []
+
+ for nfv_zone in nfv_availability_zones:
+ for vim_zone in openstack_avilability_zone:
+ if nfv_zone is vim_zone:
+ zones_available.append(nfv_zone)
+
+ if len(zones_available) == len(openstack_avilability_zone) and vnf_azone in openstack_avilability_zone:
+ return vnf_azone
+ else:
+ return openstack_avilability_zone[availavility_zone_index]
+ else:
+ raise vimconn.vimconnConflictException("No enough availablity zones for this deployment")
+ return None
+
+ def new_vminstance(self, name, description, start, image_id, flavor_id, net_list,cloud_config=None,disk_list=None,
+ availavility_zone_index=None, nfv_availability_zones=None):