def clean(self): cleaned_data = super(CreateFlavorInfoAction, self).clean() name = cleaned_data.get('name') flavor_id = cleaned_data.get('flavor_id') try: flavors = api.nova.flavor_list(self.request, None) except Exception: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None: for flavor in flavors: if flavor.name == name: raise forms.ValidationError( _('The name "%s" is already used by another flavor.') % name ) if flavor.id == flavor_id: raise forms.ValidationError( _('The ID "%s" is already used by another flavor.') % flavor_id ) return cleaned_data
def clean(self): cleaned_data = super(AddCGroupInfoAction, self).clean() name = cleaned_data.get('name') try: cgroups = cinder.volume_cgroup_list(self.request) except Exception: msg = _('Unable to get consistency group list') exceptions.check_message(["Connection", "refused"], msg) raise if cgroups is not None and name is not None: for cgroup in cgroups: if cgroup.name.lower() == name.lower(): # ensure new name has reasonable length formatted_name = name if len(name) > 20: formatted_name = name[:14] + "..." + name[-3:] raise forms.ValidationError( _('The name "%s" is already used by ' 'another consistency group.') % formatted_name ) return cleaned_data
def clean(self): cleaned_data = super(ResourceClassInfoAndFlavorsAction, self).clean() name = cleaned_data.get('name') resource_class_id = self.initial.get('resource_class_id', None) try: resource_classes = tuskar.ResourceClass.list(self.request) except Exception: resource_classes = [] msg = _('Unable to get resource class list') exceptions.check_message(["Connection", "refused"], msg) raise for resource_class in resource_classes: if resource_class.name == name and \ resource_class_id != resource_class.id: raise forms.ValidationError( _('The name "%s" is already used by' ' another resource class.') % name ) formset = self.initial.get('_formsets', {}).get('flavors') if formset: if formset.is_valid(): cleaned_data['flavors'] = [form.cleaned_data for form in formset if form.cleaned_data and not form.cleaned_data['DELETE']] else: raise forms.ValidationError( _('Errors in the flavors list.'), ) return cleaned_data
def clean(self): cleaned_data = super(RackCreateInfoAction, self).clean() name = cleaned_data.get('name') rack_id = self.initial.get('rack_id', None) subnet = cleaned_data.get('subnet') try: racks = api.tuskar.Rack.list(self.request) except: racks = [] exceptions.check_message(['Connection', 'refused'], _("Unable to retrieve rack list.")) raise # Validations: detect duplicates for rack in racks: other_record = rack_id != rack.id if rack.name == name and other_record: raise forms.ValidationError( _('The name %s is already used by another rack.') % name) if rack.subnet == subnet and other_record: raise forms.ValidationError( _('The subnet is already assigned to rack %s.') % (rack.name)) return cleaned_data
def server_migrate(request, instance_id): try: novaclient_with_newtoken(request).servers.migrate(instance_id) except nova_exceptions.ClientException as e: msg = e.message exceptions.check_message(["No", "valid", "host", "found"], msg) raise
def clean(self): cleaned_data = super(AddGroupInfoAction, self).clean() name = cleaned_data.get('name') group_id = cleaned_data.get('group_id') try: groups = client(self.request).get_groups() except Exception: groups = [] msg = _('Unable to get groups list') exceptions.check_message(["Connection", "refused"], msg) raise if groups is not None and name is not None: for group in groups: if group.name.lower() == name.lower(): raise forms.ValidationError( _('The name "%s" is already used by another group.') % name) if group.id == group_id: raise forms.ValidationError( _('The ID "%s" is already used by another group.') % group_id) cleaned_data['script_data'] = normalize_newlines( cleaned_data['script_data']) # files = self.request.FILES # script = self.clean_uploaded_files('script', files) # # if script is not None: # cleaned_data['script_data'] = script return cleaned_data
def clean(self): name = self.cleaned_data.get('name') group_id = self.cleaned_data.get('group_id') try: groups = client(self.request).get_groups() except Exception: groups = [] msg = _('Unable to get groups list') exceptions.check_message(["Connection", "refused"], msg) raise # Check if there is no group with the same name if groups is not None and name is not None: for group in groups: if (group.name.lower() == name.lower() and group.group_id != group_id): raise forms.ValidationError( _('The name "%s" is already used by another ' 'group.') % name) self.cleaned_data['script_data'] = \ normalize_newlines(self.cleaned_data['script_data']) # files = self.request.FILES # script = self.clean_uploaded_files('script', files) # # if script is not None: # self.cleaned_data['script_data'] = script return self.cleaned_data
def clean(self): cleaned_data = super(CommonData, self).clean() name = cleaned_data.get('name') try: if self.request.user.is_superuser: for attribute in bgpvpn_common.RT_FORMAT_ATTRIBUTES: if not cleaned_data.get(attribute): del cleaned_data[attribute] else: cleaned_data[attribute] = bgpvpn_common.format_rt( cleaned_data[attribute]) # if an admin user use the bgpvpn panel project # tenant_id field doesn't exist if not cleaned_data.get('tenant_id'): tenant_id = self.request.user.tenant_id else: tenant_id = cleaned_data.get('tenant_id') bgpvpn_api.bgpvpns_list(self.request, name=name, tenant_id=tenant_id) else: bgpvpn_api.bgpvpns_list(self.request, name=name) except Exception: msg = _('Unable to get BGPVPN with name %s') % name exceptions.check_message(["Connection", "refused"], msg) raise return cleaned_data
def clean(self): cleaned_data = super(UpdateSourceDomainInfoForm, self).clean() id = cleaned_data.get('id') name = cleaned_data.get('name') availability_zone = cleaned_data.get('availability_zone') try: aggregates = api.nova.aggregate_details_list(self.request) except Exception: msg = _('Unable to get source domain list') exceptions.check_message(["Connection", "refused"], msg) raise if aggregates is not None: for aggregate in aggregates: if str(aggregate.id) != str(id) and aggregate.name.lower() == name.lower(): raise forms.ValidationError( _('The name "%s" is already used by ' 'another source domain.') % name ) if str(aggregate.id) != str(id) and aggregate.availability_zone.lower() == availability_zone.lower(): raise forms.ValidationError( _('The availability_zone "%s" is already used by ' 'another source domain.') % availability_zone ) return cleaned_data
def get_networks_data(self): try: opts = self._get_search_opts() networks = neutron.network_list(self.tab_group.request, **opts) except Exception: networks = [] msg = _('Unable to get tenant network list.') exceptions.check_message(["Connection", "refused"], msg) raise if networks: self.exception = False tenant_dict = self._get_tenant_list() for n in networks: # Set tenant name tenant = tenant_dict.get(n.tenant_id, None) n.tenant_name = getattr(tenant, 'name', None) # If name is empty use UUID as name n.set_id_as_name_if_empty() # Get number of DHCP agents n.num_agents = self._get_agents_data(n.id) if self.exception: msg = _('Unable to list dhcp agents hosting network.') exceptions.handle(self.request, msg) return networks
def clean(self): cleaned_data = super(CreateFlavorInfoAction, self).clean() name = cleaned_data.get('name') flavor_id = cleaned_data.get('flavor_id') if name and name.isspace(): msg = _('Flavor name cannot be empty.') self._errors['name'] = self.error_class([msg]) try: flavors = api.nova.flavor_list(self.request, None) except Exception: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None and name is not None: for flavor in flavors: if flavor.name.lower() == name.lower(): error_msg = _('The name "%s" is already used by ' 'another flavor.') % name self._errors['name'] = self.error_class([error_msg]) if flavor.id == flavor_id: error_msg = _('The ID "%s" is already used by ' 'another flavor.') % flavor_id self._errors['flavor_id'] = self.error_class([error_msg]) return cleaned_data
def clean(self): cleaned_data = super(AddGroupInfoAction, self).clean() name = cleaned_data.get('name') try: groups = cinder.group_list(self.request) except Exception: msg = _('Unable to get group list') exceptions.check_message(["Connection", "refused"], msg) raise if groups is not None and name is not None: for group in groups: if group.name.lower() == name.lower(): # ensure new name has reasonable length formatted_name = name if len(name) > 20: formatted_name = name[:14] + "..." + name[-3:] raise forms.ValidationError( _('The name "%s" is already used by ' 'another group.') % formatted_name ) return cleaned_data
def clean(self): cleaned_data = super(RackCreateInfoAction, self).clean() name = cleaned_data.get('name') rack_id = self.initial.get('rack_id', None) subnet = cleaned_data.get('subnet') try: racks = tuskar.Rack.list(self.request) except Exception: racks = [] exceptions.check_message(['Connection', 'refused'], _("Unable to retrieve rack list.")) raise # Validations: detect duplicates for rack in racks: other_record = rack_id != rack.id if rack.name == name and other_record: raise forms.ValidationError( _('The name %s is already used by another rack.') % name) if rack.subnet == subnet and other_record: raise forms.ValidationError( _('The subnet is already assigned to rack %s.') % (rack.name)) return cleaned_data
def handle(self, request, context): selected_vol_types = context['volume_types'] try: vol_types = cinder.volume_type_list_with_qos_associations( request) except Exception: msg = _('Unable to get volume type list') exceptions.check_message(["Connection", "refused"], msg) return False # ensure that all selected volume types share same backend name backend_name = None invalid_backend = False for selected_vol_type in selected_vol_types: if invalid_backend: continue for vol_type in vol_types: if selected_vol_type != vol_type.id: continue if (hasattr(vol_type, "extra_specs") and 'volume_backend_name' in vol_type.extra_specs): vol_type_backend = \ vol_type.extra_specs['volume_backend_name'] if vol_type_backend is None: invalid_backend = True break if backend_name is None: backend_name = vol_type_backend if vol_type_backend != backend_name: invalid_backend = True break else: invalid_backend = True break if invalid_backend: msg = _('All selected volume types must be associated ' 'with the same volume backend name.') exceptions.handle(request, msg) return False try: vtypes_str = ",".join(context['volume_types']) self.object = \ cinder.volume_cgroup_create( request, vtypes_str, context['name'], description=context['description'], availability_zone=context['availability_zone']) except Exception: exceptions.handle(request, _('Unable to create consistency ' 'group.')) return False return True
def delete(self, request, obj_id): try: api. delete_securitygroup(request,obj_id) except Exception: msg = _('Unable to delete Securitygroup "%s"' 'depend on it.') exceptions.check_message(["securitygroups", "dependent"], msg % obj_id) raise
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: cinder.volume_delete(request, obj_id) except Exception: msg = _('Unable to delete volume "%s". One or more snapshots ' "depend on it.") exceptions.check_message(["snapshots", "dependent"], msg % name) raise
def get_nova_services_data(self): try: services = api.nova.service_list(self.request) except Exception: msg = _('Unable to get nova services list.') exceptions.check_message(["Connection", "refused"], msg) exceptions.handle(self.request, msg) services = [] return services
def get_cinder_services_data(self): try: services = cinder.service_list(self.tab_group.request) except Exception: msg = _('Unable to get cinder services list.') exceptions.check_message(["Connection", "refused"], msg) exceptions.handle(self.request, msg) services = [] return services
def get_nova_services_data(self): try: services = nova.service_list(self.tab_group.request) except Exception: msg = _('Unable to get nova services list.') exceptions.check_message(["Connection", "refused"], msg) raise return services
def get_cinder_services_data(self): try: services = cinder.service_list(self.tab_group.request) except Exception: msg = _("Unable to get cinder services list.") exceptions.check_message(["Connection", "refused"], msg) exceptions.handle(self.request, msg) services = [] return services
def get_network_agents_data(self): try: agents = neutron.agent_list(self.tab_group.request) except Exception: msg = _('Unable to get network agents list.') exceptions.check_message(["Connection", "refused"], msg) raise return agents
def get_heat_services_data(self): try: services = heat.service_list(self.tab_group.request) except Exception: msg = _('Unable to get Orchestration service list.') exceptions.check_message(["Connection", "refused"], msg) exceptions.handle(self.request, msg) services = [] return services
def delete(self, request, obj_id): try: api.delete_securitygroup(request, obj_id) except Exception: msg = _('Unable to delete Securitygroup "%s"' 'depend on it.') exceptions.check_message(["securitygroups", "dependent"], msg % obj_id) raise
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: manila.share_snapshot_delete(request, obj_id) except Exception: msg = _('Unable to delete snapshot "%s". One or more shares ' 'depend on it.') exceptions.check_message(["snapshots", "dependent"], msg % name) raise
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: manila.share_group_snapshot_delete(request, obj_id) except Exception: msg = _('Unable to delete share group snapshot "%s". ' 'One or more share groups depend on it.') exceptions.check_message(["snapshots", "dependent"], msg % name) raise
def get_provider_networks_data(self): try: providernets = \ neutron.provider_network_list(self.tab_group.request) except Exception: providernets = [] msg = _('Unable to get provider network list.') exceptions.check_message(["Connection", "refused"], msg) raise return providernets
def get_data_networks_data(self): try: datanets = \ stx_sysinv.data_network_list(self.tab_group.request) except Exception: datanets = [] msg = _('Unable to get provider network list.') exceptions.check_message(["Connection", "refused"], msg) raise return datanets
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: cinder.volume_delete(request, obj_id) except Exception: msg = _('Unable to delete volume "%s". One or more snapshots ' 'depend on it.') exceptions.check_message(["snapshots", "dependent"], msg % name) raise
def get_controller_services_data(self): try: # instances before servicegroups because for it updates sg db # instances = iservice.iservice_list(self.tab_group.request) # servicegroups = iservice.iservicegroup_list( # self.tab_group.request) nodes = iservice.sm_nodes_list(self.tab_group.request) # fields = ['id', 'name', 'state', 'online'] sdas = iservice.sm_sda_list(self.tab_group.request) # controller-1 is not in sda when installing, but is in node-list # with state "unknown" # fields = ['uuid', 'service_group_name', 'node_name', # 'state', 'status', 'condition'] services = [] sgs = self._find_service_group_names(sdas) sdaid = 0 for sg in sgs: sdaid += 1 entry = {} entry.update({'id': sdaid}) entry.update({'servicename': sg}) sg_states = self._update_service_group_states(sg, sdas, nodes) entry.update(sg_states) # Need to latch if any sg is enabled if 'c0_activity' in entry.keys(): sgstate = entry['c0_activity'] if sgstate == "active": entry.update({'sgstate': sgstate}) elif 'c1_activity' in entry.keys(): sgstate = entry['c1_activity'] if sgstate == "active": entry.update({'sgstate': sgstate}) if sgstate != "active": entry.update({'sgstate': sgstate}) if entry != {}: entry_object = objectify.objectify(entry) services.append(entry_object) # services_object = objectify.objectify(services) except Exception: services = [] msg = _('Unable to get controller services list.') exceptions.check_message(["Connection", "refused"], msg) raise return services
def clean_location(self): try: host_id = self.cleaned_data['host_id'] host = stx_api.sysinv.host_get(self.request, host_id) location = host._location location['locn'] = self.cleaned_data.get('location') return location except Exception: msg = _('Unable to get host data') exceptions.check_message(["Connection", "refused"], msg) raise
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: apply = applydisk.objects.filter(id=obj_id) apply.update(status='5') except Exception: msg = _('Unable to delete volume "%s". One or more snapshots ' 'depend on it.') exceptions.check_message(["snapshots", "dependent"], msg % name) raise
def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: nova.server_group_delete(request, obj_id) except Exception: msg = _('Unable to delete group "%s" because it is not empty. ' 'Either delete the member ' 'instances or remove them from the group.') exceptions.check_message(["group", "not", "empty."], msg % name) raise
def get_context_data(self, request): try: context = super(StorageServicesTab, self).get_context_data(request) context['monitors'] = self.get_monitors_data() context['osds'] = self.get_osds_data() context['cluster'] = self.get_cluster_data() context['storage'] = self.get_storage_data() return context except Exception as e: LOG.error(e) msg = _('Unable to get storage services list.') exceptions.check_message(["Connection", "refused"], msg) return
def get_controller_services_data(self): """Populate the data for the controller services tab""" # Here we filter the controller-1 column if we're a simplex system # We should make this data driven in the future. This would allow us to # more easily support n controllers if sysinv_api.is_system_mode_simplex(self.tab_group.request): controller1_col = self._tables['controller_services'].columns['c1'] controller1_col.classes.append("hide") try: nodes = iservice.sm_nodes_list(self.tab_group.request) sdas = iservice.sm_sda_list(self.tab_group.request) services = [] sgs = self._find_service_group_names(sdas) sdaid = 0 for sg in sgs: sdaid += 1 entry = {} entry.update({'id': sdaid}) entry.update({'servicename': sg}) sg_states = self._update_service_group_states(sg, sdas, nodes) entry.update(sg_states) # Need to latch if any sg is enabled if 'c0_activity' in entry.keys(): sgstate = entry['c0_activity'] if sgstate == "active": entry.update({'sgstate': sgstate}) elif 'c1_activity' in entry.keys(): sgstate = entry['c1_activity'] if sgstate == "active": entry.update({'sgstate': sgstate}) if sgstate != "active": entry.update({'sgstate': sgstate}) if entry != {}: entry_object = objectify.objectify(entry) services.append(entry_object) except Exception: msg = _('Unable to get controller services list.') exceptions.check_message(["Connection", "refused"], msg) raise return services
def clean(self): cleaned_data = super(SetAggregateInfoAction, self).clean() name = cleaned_data.get("name") try: aggregates = api.nova.aggregate_details_list(self.request) except Exception: msg = _("Unable to get host aggregate list") exceptions.check_message(["Connection", "refused"], msg) raise if aggregates is not None: for aggregate in aggregates: if aggregate.name.lower() == name.lower(): raise forms.ValidationError(_('The name "%s" is already used by ' "another host aggregate.") % name) return cleaned_data
def get_network_agents_data(self): try: agents = api.neutron.agent_list(self.request) enable_network_overlay = getattr( self.request, 'enable_network_overlay', False) if enable_network_overlay: for agent in agents: if agent.agent_type == 'L3 agent': agents.remove(agent) except Exception: msg = _('Unable to get network agents list.') exceptions.check_message(["Connection", "refused"], msg) exceptions.handle(self.request, msg) agents = [] return agents
def clean(self): cleaned_data = super(CreateRateInfoAction, self).clean() type = cleaned_data.get('type') try: rates = SourceRate.objects.filter(type=type) except Exception: msg = _('Unable to get Resource Rate list') exceptions.check_message(["Connection", "refused"], msg) raise if rates: raise forms.ValidationError( _('The resource name "%s" is already has assigned rates!') % type ) return cleaned_data
def clean_flavor_id(self): flavor_id = self.data.get('flavor_id') try: flavors = api.nova.flavor_list(self.request) except Exception: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None: for flavor in flavors: if flavor.id == flavor_id: raise forms.ValidationError( _('The ID "%s" is already used by another flavor.') % flavor_id) return flavor_id
def clean(self): cleaned_data = super(CreateBgpVpn, self).clean() name = cleaned_data.get('name') tenant_id = cleaned_data.get('tenant_id') try: bgpvpns = bgpvpn_api.bgpvpns_list(self.request, name=name, tenant_id=tenant_id) except Exception: msg = _('Unable to get BGPVPN with name %s') % name exceptions.check_message(["Connection", "refused"], msg) raise if bgpvpns: raise forms.ValidationError( _('The name "%s" is already used by another BGPVPN.') % name) return cleaned_data
def clean_name(self): name = self.cleaned_data.get('name') try: flavors = api.nova.flavor_list(self.request) except: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None: for flavor in flavors: if flavor.name == name: raise forms.ValidationError( _('The name "%s" is already used by another flavor.') % name) return name
def clean(self): cleaned_data = super(SetAggregateInfoAction, self).clean() name = cleaned_data.get('name') try: aggregates = api.nova.aggregate_details_list(self.request) except Exception: msg = _('Unable to get host aggregate list') exceptions.check_message(["Connection", "refused"], msg) raise if aggregates is not None: for aggregate in aggregates: if aggregate.name.lower() == name.lower(): raise forms.ValidationError( _('The name "%s" is already used by ' 'another host aggregate.') % name) return cleaned_data
def clean_flavor_id(self): flavor_id = self.data.get('flavor_id') try: flavors = api.nova.flavor_list(self.request) except: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None: for flavor in flavors: if flavor.id == flavor_id: raise forms.ValidationError( _('The ID "%s" is already used by another flavor.') % flavor_id ) return flavor_id
def clean_name(self): name = self.cleaned_data.get('name') try: flavors = api.nova.flavor_list(self.request) except: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise if flavors is not None: for flavor in flavors: if flavor.name == name: raise forms.ValidationError( _('The name "%s" is already used by another flavor.') % name ) return name
def clean(self): cleaned_data = super(CreateFlavor, self).clean() name = cleaned_data.get('name') flavor_id = self.initial.get('flavor_id', None) try: flavors = api.tuskar.FlavorTemplate.list(self.request) except: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise # Check if there is no flavor with the same name for flavor in flavors: if flavor.name == name and flavor.id != flavor_id: raise forms.ValidationError( _('The name "%s" is already used by another flavor.') % name) return cleaned_data
def clean(self): name = self.cleaned_data.get('name') flavor_id = self.cleaned_data.get('flavor_id') try: flavors = api.nova.flavor_list(self.request, None) except Exception: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise # Check if there is no flavor with the same name if flavors is not None: for flavor in flavors: if flavor.name == name and flavor.id != flavor_id: raise forms.ValidationError( _('The name "%s" is already used by another ' 'flavor.') % name) return self.cleaned_data
def clean(self): cleaned_data = super(CreateFlavor, self).clean() name = cleaned_data.get('name') flavor_id = self.initial.get('flavor_id', None) try: flavors = api.tuskar.FlavorTemplate.list(self.request) except: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise # Check if there is no flavor with the same name for flavor in flavors: if flavor.name == name and flavor.id != flavor_id: raise forms.ValidationError( _('The name "%s" is already used by another flavor.') % name ) return cleaned_data
def clean(self): name = self.cleaned_data.get('name') flavor_id = self.cleaned_data.get('flavor_id') try: flavors = api.nova.flavor_list(self.request, None) except Exception: flavors = [] msg = _('Unable to get flavor list') exceptions.check_message(["Connection", "refused"], msg) raise # Check if there is no flavor with the same name if flavors is not None and name is not None: for flavor in flavors: if (flavor.name.lower() == name.lower() and flavor.id != flavor_id): error_msg = _('The name "%s" is already used by ' 'another flavor.') % name self._errors['name'] = self.error_class([error_msg]) return self.cleaned_data
def clean(self): cleaned_data = super(ResourceClassInfoAndFlavorsAction, self).clean() name = cleaned_data.get('name') resource_class_id = self.initial.get('resource_class_id', None) try: resource_classes = api.tuskar.ResourceClass.list(self.request) except: resource_classes = [] msg = _('Unable to get resource class list') exceptions.check_message(["Connection", "refused"], msg) raise for resource_class in resource_classes: if resource_class.name == name and \ resource_class_id != resource_class.id: raise forms.ValidationError( _('The name "%s" is already used by' ' another resource class.') % name ) return cleaned_data