def update_sc_instance_attributes(request, scinstance): ptg_url = "horizon:project:policytargets:policy_targetdetails" clsurl = "horizon:project:application_policy:policyclassifierdetails" scspec_url = "horizon:project:network_services:sc_spec_details" consumer_ptg = scinstance.consumer_ptg_id provider_ptg = scinstance.provider_ptg_id scspec = scinstance.servicechain_specs classifier = scinstance.classifier_id if consumer_ptg is not None and consumer_ptg != "N/A": ptg = client.policy_target_get(request, consumer_ptg) u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id}) atag = "<a href='%s'>%s</a>" % (u, ptg.name) setattr(scinstance, 'consumer_ptg', mark_safe(atag)) if provider_ptg is not None: ptg = client.policy_target_get(request, provider_ptg) u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id}) atag = "<a href='%s'>%s</a>" % (u, ptg.name) setattr(scinstance, 'provider_ptg', mark_safe(atag)) if classifier is not None: cls = client.policyclassifier_get(request, classifier) u = reverse(clsurl, kwargs={'policyclassifier_id': cls.id}) atag = "<a href='%s'>%s</a>" % (u, cls.name) setattr(scinstance, 'classifier', mark_safe(atag)) if scspec is not None: scs = client.get_servicechain_spec(request, scspec[0]) url = reverse(scspec_url, kwargs={'scspec_id': scs.id}) atag = "<a href='%s'>%s</a>" % (url, scs.name) setattr(scinstance, 'servicechain_spec', mark_safe(atag)) scni = update_scn_instance_attributes(request, scs) setattr(scinstance, 'servicechain', scni.chain) return scinstance
def update_sc_instance_attributes(request, scinstance): ptg_url = "horizon:project:policytargets:policy_targetdetails" clsurl = "horizon:project:application_policy:policyclassifierdetails" scspec_url = "horizon:project:network_services:sc_spec_details" consumer_ptg = scinstance.consumer_ptg provider_ptg = scinstance.provider_ptg scspec = scinstance.servicechain_spec classifier = scinstance.classifier if consumer_ptg is not None: ptg = client.policy_target_get(request, consumer_ptg) u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id}) atag = "<a href='%s'>%s</a>" % (u, ptg.name) setattr(scinstance, 'consumer_ptg', mark_safe(atag)) if provider_ptg is not None: ptg = client.policy_target_get(request, consumer_ptg) u = reverse(ptg_url, kwargs={'policy_target_id': ptg.id}) atag = "<a href='%s'>%s</a>" % (u, ptg.name) setattr(scinstance, 'provider_ptg', mark_safe(atag)) if classifier is not None: cls = client.policyclassifier_get(request, classifier) u = reverse(clsurl, kwargs={'policyclassifier_id': cls.id}) atag = "<a href='%s'>%s</a>" % (u, cls.name) setattr(scinstance, 'classifier', mark_safe(atag)) if scspec is not None: sc = client.get_servicechain_spec(request, scspec) u = reverse(scspec_url, kwargs={'scspec_id': sc.id}) atag = "<a href='%s'>%s</a>" % (u, sc.name) setattr(scinstance, 'servicechain_spec', mark_safe(atag)) return scinstance
def create_ports(request, instance_name): nics = [] pts = [] for policy_target_id in request.DATA["group_policy_targets"]: policy_target = client.policy_target_get(request, policy_target_id['id']) args = { 'policy_target_group_id': policy_target.id, 'name': instance_name[:41] + "_gbpui" } for subnet_id in policy_target.subnets: subnet = api.neutron.subnet_get(request, subnet_id) if 'fixed_ip' in policy_target_id and IPAddress( policy_target_id['fixed_ip']) in \ IPNetwork(subnet['cidr']): args['fixed_ips'] = [{ 'subnet_id': subnet['id'], 'ip_address': policy_target_id['fixed_ip'] }] port = client.pt_create(request, **args) nics.append({'port-id': port.port_id}) pts.append(port.id) meta_data = {'pts': ','.join(pts)} return meta_data, nics
def handle(self, request, context): policy_target_id = self.initial['policy_target_id'] url = reverse("horizon:project:policytargets:policy_targetdetails", kwargs={'policy_target_id': policy_target_id}) try: policy_target = client.policy_target_get(request, policy_target_id) for policy_rule_set in policy_target.get( "consumed_policy_rule_sets"): context['policy_rule_set'].append(policy_rule_set) consumed = dict([(item, 'string') for item in context['policy_rule_set']]) client.policy_target_update(request, policy_target_id, consumed_policy_rule_sets=consumed) msg = _('Policy Rule Set Added successfully!') messages.success(request, msg) LOG.debug(msg) return http.HttpResponseRedirect(url) except Exception: msg = _('Failed to add policy_rule_set!') u = "horizon:project:policytargets:policy_targetdetails" redirect = reverse(u, kwargs={'policy_target_id': policy_target_id}) LOG.error(msg) exceptions.handle(request, msg, redirect=redirect)
def create_ports(request, instance_name): nics = [] pts = [] for policy_target_id in request.DATA["group_policy_targets"]: policy_target = client.policy_target_get(request, policy_target_id['id']) args = { 'policy_target_group_id': policy_target.id, 'name': instance_name[:41] + "_gbpui" } for subnet_id in policy_target.subnets: subnet = api.neutron.subnet_get(request, subnet_id) if 'fixed_ip' in policy_target_id and IPAddress( policy_target_id['fixed_ip']) in \ IPNetwork(subnet['cidr']): args['fixed_ips'] = [{ 'subnet_id': subnet['id'], 'ip_address': policy_target_id['fixed_ip'] }] port = client.pt_create(request, **args) nics.append({ 'port-id': port.port_id }) pts.append(port.id) meta_data = {'pts': ','.join(pts)} return meta_data, nics
def handle(self, request, context): policy_target_id = self.initial['policy_target_id'] url = reverse("horizon:project:policytargets:policy_targetdetails", kwargs={'policy_target_id': policy_target_id}) try: policy_target = client.policy_target_get(request, policy_target_id) old_policy_rule_sets = policy_target.get( "provided_policy_rule_sets") for policy_rule_set in context['policy_rule_set']: old_policy_rule_sets.remove(policy_rule_set) policy_rule_sets = dict([(item, 'string') for item in old_policy_rule_sets]) client.policy_target_update( request, policy_target_id, provided_policy_rule_sets=policy_rule_sets) msg = _('Policy Rule Set removed successfully!') messages.success(request, msg) LOG.debug(msg) return http.HttpResponseRedirect(url) except Exception: msg = _('Failed to remove policy_rule_set!') u = "horizon:project:policytargets:policy_targetdetails" redirect = reverse(u, kwargs={'policy_target_id': policy_target_id}) LOG.error(msg) exceptions.handle(request, msg, redirect=redirect)
def __init__(self, request, *args, **kwargs): super(SetGroupAction, self).__init__(request, *args, **kwargs) policy_targetid = self.request.path.split("/")[-2] ptg = client.policy_target_get(request, policy_targetid) for choice in self.fields['network'].choices: if choice[0].startswith(ptg.id): initial_value = choice[0] break self.fields['network'].initial = [initial_value]
def get_context_data(self, **kwargs): context = super(PTGDetailsView, self).get_context_data(**kwargs) try: policy_target = client.policy_target_get( self.request, context['policy_target_id']) context['policy_target'] = policy_target except Exception: pass return context
def get_context_data(self, request): policy_targetid = self.tab_group.kwargs["policy_target_id"] try: policy_target = client.policy_target_get(request, policy_targetid) l3list = client.l3policy_list(request) l2list = client.l2policy_list(request) l2list = [item for item in l2list if item.id == policy_target.l2_policy_id] except Exception: exceptions.handle(request, _("Unable to retrieve group details."), redirect=self.failure_url) return {"policy_target": policy_target, "l3list": l3list, "l2list": l2list}
def _get_object(self, *args, **kwargs): policy_target_id = self.kwargs['policy_target_id'] try: policy_target = client.policy_target_get( self.request, policy_target_id) policy_target.set_id_as_name_if_empty() return policy_target except Exception: redirect = self.success_url msg = _('Unable to retrieve policy_target details.') exceptions.handle(self.request, msg, redirect=redirect)
def get_context_data(self, request): l2policy_id = self.tab_group.kwargs['l2policy_id'] try: l2policy = client.l2policy_get(request, l2policy_id) ptgs = [] for item in l2policy.policy_target_groups: ptgs.append(client.policy_target_get(request, item)) setattr(l2policy, 'ptgs', ptgs) except Exception: exceptions.handle(request, _('Unable to retrieve l2 policy details.'), redirect=self.failure_url) return {'l2policy': l2policy}
def get_context_data(self, request): l2policy_id = self.tab_group.kwargs['l2policy_id'] try: l2policy = client.l2policy_get(request, l2policy_id) ptgs = [] for item in l2policy.policy_target_groups: ptgs.append(client.policy_target_get(request, item)) setattr(l2policy, 'ptgs', ptgs) except Exception: exceptions.handle( request, _('Unable to retrieve l2 policy details.'), redirect=self.failure_url) return {'l2policy': l2policy}
def __init__(self, request, *args, **kwargs): super(RemoveConsumedPRSForm, self).__init__(request, *args, **kwargs) policy_rule_sets = [] try: policy_target_id = kwargs['initial']['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) consumedpolicy_rule_sets = policy_target.get( "consumed_policy_rule_sets") items = client.policy_rule_set_list(request) policy_rule_sets = [(p.id, p.name) for p in items if p.id in consumedpolicy_rule_sets] except Exception: pass self.fields['policy_rule_set'].choices = policy_rule_sets
def __init__(self, request, *args, **kwargs): super(RemoveConsumedPRSForm, self).__init__(request, *args, **kwargs) policy_rule_sets = [] try: policy_target_id = kwargs['initial']['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) consumedpolicy_rule_sets = policy_target.get( "consumed_policy_rule_sets") items = client.policy_rule_set_list( request, tenant_id=request.user.tenant_id) policy_rule_sets = [(p.id, p.name) for p in items if p.id in consumedpolicy_rule_sets] except Exception: pass self.fields['policy_rule_set'].choices = policy_rule_sets
def __init__(self, request, *args, **kwargs): super(RemoveProvidedPRSForm, self).__init__(request, *args, **kwargs) policy_rule_sets = [] try: policy_target_id = kwargs['initial']['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) providedpolicy_rule_sets = policy_target.get( "provided_policy_rule_sets") items = client.policy_rule_set_list( request, tenant_id=request.user.tenant_id) policy_rule_sets = [(p.id, p.name) for p in items if p.id in providedpolicy_rule_sets] except Exception as e: msg = _('Unable to retrieve policy rule set list.') % (str(e)) LOG.debug(msg) self.fields['policy_rule_set'].choices = policy_rule_sets
def __init__(self, request, *args, **kwargs): super(RemoveProvidedPRSForm, self).__init__(request, *args, **kwargs) policy_rule_sets = [] try: policy_target_id = kwargs['initial']['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) providedpolicy_rule_sets = policy_target.get( "provided_policy_rule_sets") items = client.policy_rule_set_list(request) policy_rule_sets = [(p.id, p.name) for p in items if p.id in providedpolicy_rule_sets] except Exception as e: msg = _('Unable to retrieve policy rule set list.') % (str(e)) LOG.debug(msg) self.fields['policy_rule_set'].choices = policy_rule_sets
def get_provided_policy_rule_sets_data(self): try: policy_targetid = self.tab_group.kwargs["policy_target_id"] policy_target = client.policy_target_get(self.request, policy_targetid) provided_policy_rule_set_ids = policy_target.get("provided_policy_rule_sets") provided_policy_rule_sets = [] for _id in provided_policy_rule_set_ids: provided_policy_rule_sets.append(client.policy_rule_set_get(self.request, _id)) provided_policy_rule_sets = [ gfilters.update_pruleset_attributes(self.request, item) for item in provided_policy_rule_sets ] return provided_policy_rule_sets except Exception: error_message = _("Unable to get provided rule sets") exceptions.handle(self.request, error_message) return []
def get_context_data(self, request): policy_targetid = self.tab_group.kwargs['policy_target_id'] try: policy_target = client.policy_target_get(request, policy_targetid) l3list = client.l3policy_list(request) l2list = client.l2policy_list(request) l2list = [ item for item in l2list if item.id == policy_target.l2_policy_id] except Exception: exceptions.handle( request, _('Unable to retrieve group details.'), redirect=self.failure_url) return {'policy_target': policy_target, 'l3list': l3list, 'l2list': l2list}
def __init__(self, request, *args, **kwargs): super(UpdatePolicyTargetForm, self).__init__(request, *args, **kwargs) try: policy_target_id = self.initial['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) policy_rule_sets = client.policy_rule_set_list(request, tenant_id=request.user.tenant_id) for c in policy_rule_sets: c.set_id_as_name_if_empty() policy_rule_sets = sorted( policy_rule_sets, key=lambda rule: rule.name) policy_rule_set_list = [(c.id, c.name) for c in policy_rule_sets] self.fields[ 'provided_policy_rule_sets'].choices = policy_rule_set_list self.fields[ 'consumed_policy_rule_sets'].choices = policy_rule_set_list provided_init = [] consumed_init = [] for item in policy_rule_set_list: if item[0] in policy_target.provided_policy_rule_sets: provided_init.append(item[0]) if item[0] in policy_target.consumed_policy_rule_sets: consumed_init.append(item[0]) self.fields['provided_policy_rule_sets'].initial = provided_init self.fields['consumed_policy_rule_sets'].initial = consumed_init n_policies = client.l2policy_list(request, tenant_id=request.user.tenant_id) ns_policies = client.networkservicepolicy_list(request, tenant_id=request.user.tenant_id) n_policies = [(item.id, item.name) for item in n_policies] ns_policies = [(item.id, item.name) for item in ns_policies] ns_policies.insert(0, ('None', 'None')) self.fields['l2_policy_id'].choices = n_policies self.fields['network_service_policy_id'].choices = ns_policies for i in ['name', 'description', 'l2_policy_id', 'network_service_policy_id', 'shared']: self.fields[i].initial = getattr(policy_target, i) except Exception as e: msg = _('Unable to retrieve policy_rule_set details. %s') % ( str(e)) exceptions.handle(request, msg) pass
def get_consumed_policy_rule_sets_data(self): try: policy_targetid = self.tab_group.kwargs['policy_target_id'] policy_target = client.policy_target_get( self.request, policy_targetid) consumed_policy_rule_set_ids = policy_target.get( 'consumed_policy_rule_sets') consumed_policy_rule_sets = [] for _id in consumed_policy_rule_set_ids: consumed_policy_rule_sets.append( client.policy_rule_set_get(self.request, _id)) consumed_policy_rule_sets = [gfilters.update_pruleset_attributes( self.request, item) for item in consumed_policy_rule_sets] return consumed_policy_rule_sets except Exception: error_message = _('Unable to get consumed rule sets') exceptions.handle(self.request, error_message) return []
def get_provided_policy_rule_sets_data(self): try: policy_targetid = self.tab_group.kwargs['policy_target_id'] policy_target = client.policy_target_get( self.request, policy_targetid) provided_policy_rule_set_ids = policy_target.get( 'provided_policy_rule_sets') provided_policy_rule_sets = [] for _id in provided_policy_rule_set_ids: provided_policy_rule_sets.append( client.policy_rule_set_get(self.request, _id)) provided_policy_rule_sets = [gfilters.update_pruleset_attributes( self.request, item) for item in provided_policy_rule_sets] return provided_policy_rule_sets except Exception: error_message = _('Unable to get provided rule sets') exceptions.handle(self.request, error_message) return []
def __init__(self, request, *args, **kwargs): super(UpdatePolicyTargetForm, self).__init__(request, *args, **kwargs) try: policy_target_id = self.initial['policy_target_id'] policy_target = client.policy_target_get(request, policy_target_id) policy_rule_sets = client.policy_rule_set_list( request, tenant_id=request.user.tenant_id) for c in policy_rule_sets: c.set_id_as_name_if_empty() policy_rule_sets = sorted(policy_rule_sets, key=lambda rule: rule.name) policy_rule_set_list = [(c.id, c.name) for c in policy_rule_sets] self.fields[ 'provided_policy_rule_sets'].choices = policy_rule_set_list self.fields[ 'consumed_policy_rule_sets'].choices = policy_rule_set_list provided_init = [] consumed_init = [] for item in policy_rule_set_list: if item[0] in policy_target.provided_policy_rule_sets: provided_init.append(item[0]) if item[0] in policy_target.consumed_policy_rule_sets: consumed_init.append(item[0]) self.fields['provided_policy_rule_sets'].initial = provided_init self.fields['consumed_policy_rule_sets'].initial = consumed_init n_policies = client.l2policy_list(request, tenant_id=request.user.tenant_id) ns_policies = client.networkservicepolicy_list( request, tenant_id=request.user.tenant_id) n_policies = [(item.id, item.name) for item in n_policies] ns_policies = [(item.id, item.name) for item in ns_policies] ns_policies.insert(0, ('None', 'None')) self.fields['l2_policy_id'].choices = n_policies self.fields['network_service_policy_id'].choices = ns_policies for i in [ 'name', 'description', 'l2_policy_id', 'network_service_policy_id', 'shared' ]: self.fields[i].initial = getattr(policy_target, i) except Exception as e: msg = _('Unable to retrieve policy_rule_set details. %s') % ( str(e)) exceptions.handle(request, msg) pass
def get_context_data(self, request): policy_targetid = self.tab_group.kwargs['policy_target_id'] nsp = '' try: policy_target = client.policy_target_get(request, policy_targetid) l2_policy = client.l2policy_get(request, policy_target["l2_policy_id"]) l3_policy = client.l3policy_get(request, l2_policy["l3_policy_id"]) if policy_target['network_service_policy_id']: nsp_id = policy_target['network_service_policy_id'] nsp = client.get_networkservice_policy(request, nsp_id) except Exception: exceptions.handle( request, _('Unable to retrieve group details.'), redirect=self.failure_url) return {'policy_target': policy_target, 'l3_policy': l3_policy, 'l2_policy': l2_policy, 'nsp': nsp}
def get_context_data(self, request): policy_targetid = self.tab_group.kwargs['policy_target_id'] nsp = '' try: policy_target = client.policy_target_get(request, policy_targetid) l2_policy = client.l2policy_get(request, policy_target["l2_policy_id"]) l3_policy = client.l3policy_get(request, l2_policy["l3_policy_id"]) if policy_target['network_service_policy_id']: nsp_id = policy_target['network_service_policy_id'] nsp = client.get_networkservice_policy(request, nsp_id) except Exception: exceptions.handle(request, _('Unable to retrieve group details.'), redirect=self.failure_url) return { 'policy_target': policy_target, 'l3_policy': l3_policy, 'l2_policy': l2_policy, 'nsp': nsp }
def __init__(self, request, *args, **kwargs): super(SetGroupAction, self).__init__(request, *args, **kwargs) policy_targetid = self.request.path.split("/")[-2] ptg = client.policy_target_get(request, policy_targetid) subnet_dedails = None for subnet_id in ptg.subnets: try: subnet = api.neutron.subnet_get(request, subnet_id) if subnet_dedails is None: subnet_dedails = subnet['cidr'] else: subnet_dedails = subnet_dedails + ";" + subnet['cidr'] allocation_pools = subnet['allocation_pools'] if allocation_pools: start = allocation_pools[0]['start'] end = allocation_pools[0]['end'] subnet_dedails = subnet_dedails + "," + start subnet_dedails = subnet_dedails + "," + end except Exception as e: LOG.error(str(e)) pass initial_value = policy_targetid + ":" + subnet_dedails self.fields['network'].initial = [initial_value]
def handle(self, request, context): custom_script = context.get('script_data', '') dev_mapping_1 = None dev_mapping_2 = None image_id = '' # Determine volume mapping options source_type = context.get('source_type', None) if source_type in ['image_id', 'instance_snapshot_id']: image_id = context['source_id'] elif source_type in ['volume_id', 'volume_snapshot_id']: try: if api.nova.extension_supported("BlockDeviceMappingV2Boot", request): # Volume source id is extracted from the source volume_source_id = context['source_id'].split(':')[0] device_name = context.get('device_name', '') \ .strip() or None dev_source_type_mapping = { 'volume_id': 'volume', 'volume_snapshot_id': 'snapshot' } dev_mapping_2 = [ {'device_name': device_name, 'source_type': dev_source_type_mapping[source_type], 'destination_type': 'volume', 'delete_on_termination': int(bool(context['delete_on_terminate'])), 'uuid': volume_source_id, 'boot_index': '0', 'volume_size': context['volume_size'] } ] else: dev_mapping_1 = {context['device_name']: '%s::%s' % (context['source_id'], int(bool(context['delete_on_terminate']))) } except Exception: msg = _('Unable to retrieve extensions information') exceptions.handle(request, msg) elif source_type == 'volume_image_id': device_name = context.get('device_name', '').strip() or None dev_mapping_2 = [ {'device_name': device_name, # None auto-selects device 'source_type': 'image', 'destination_type': 'volume', 'delete_on_termination': int(bool(context['delete_on_terminate'])), 'uuid': context['source_id'], 'boot_index': '0', 'volume_size': context['volume_size'] } ] avail_zone = context.get('availability_zone', None) try: instance_count = int(context['count']) count = 1 while count <= instance_count: if instance_count == 1: instance_name = context['name'] else: instance_name = context['name'] + str(count) nics = [] for ptg_id in context['group_id']: values = ptg_id.split(":") ptg_id = values[0] args = {'policy_target_group_id': ptg_id, 'name': instance_name[:41] + "_gbpui"} if len(values) == 3: ptg = client.policy_target_get(request, ptg_id) fixed_ip = values[2] for subnet_id in ptg.subnets: subnet = api.neutron.subnet_get(request, subnet_id) if IPAddress(fixed_ip) in \ IPNetwork(subnet['cidr']): args['fixed_ips'] = [ {'subnet_id': subnet['id'], 'ip_address': fixed_ip}] break ep = client.pt_create(request, **args) nics.append({'port-id': ep.port_id}) api.nova.server_create(request, instance_name, image_id, context['flavor'], context['keypair_id'], normalize_newlines(custom_script), security_groups=None, block_device_mapping=dev_mapping_1, block_device_mapping_v2=dev_mapping_2, nics=nics, availability_zone=avail_zone, instance_count=1, admin_pass=context['admin_pass'], disk_config=context.get('disk_config'), config_drive=context.get('config_drive')) count += 1 return True except Exception as e: error = _("Unable to launch member %(count)s with name %(name)s") msg = error % {'count': count, 'name': instance_name} LOG.error(str(e)) u = "horizon:project:policytargets:policy_targetdetails" policy_target_id = self.request.path.split("/")[-2] redirect = reverse(u, kwargs={'policy_target_id': policy_target_id}) exceptions.handle(request, msg, redirect=redirect) return False
def handle(self, request, context): custom_script = context.get('script_data', '') dev_mapping_1 = None dev_mapping_2 = None image_id = '' # Determine volume mapping options source_type = context.get('source_type', None) if source_type in ['image_id', 'instance_snapshot_id']: image_id = context['source_id'] elif source_type in ['volume_id', 'volume_snapshot_id']: try: if api.nova.extension_supported("BlockDeviceMappingV2Boot", request): # Volume source id is extracted from the source volume_source_id = context['source_id'].split(':')[0] device_name = context.get('device_name', '') \ .strip() or None dev_source_type_mapping = { 'volume_id': 'volume', 'volume_snapshot_id': 'snapshot' } dev_mapping_2 = [ {'device_name': device_name, 'source_type': dev_source_type_mapping[source_type], 'destination_type': 'volume', 'delete_on_termination': int(bool(context['delete_on_terminate'])), 'uuid': volume_source_id, 'boot_index': '0', 'volume_size': context['volume_size'] } ] else: dev_mapping_1 = {context['device_name']: '%s::%s' % (context['source_id'], int(bool(context['delete_on_terminate']))) } except Exception: msg = _('Unable to retrieve extensions information') exceptions.handle(request, msg) elif source_type == 'volume_image_id': device_name = context.get('device_name', '').strip() or None dev_mapping_2 = [ {'device_name': device_name, # None auto-selects device 'source_type': 'image', 'destination_type': 'volume', 'delete_on_termination': int(bool(context['delete_on_terminate'])), 'uuid': context['source_id'], 'boot_index': '0', 'volume_size': context['volume_size'] } ] avail_zone = context.get('availability_zone', None) try: instance_count = int(context['count']) count = 1 while count <= instance_count: if instance_count == 1: instance_name = context['name'] else: instance_name = context['name'] + str(count) nics = [] pts = [] for ptg_id in context['group_id']: values = ptg_id.split(":") ptg_id = values[0] args = {'policy_target_group_id': ptg_id, 'name': instance_name[:41] + "_gbpui"} if len(values) == 3: ptg = client.policy_target_get(request, ptg_id) fixed_ip = values[2] for subnet_id in ptg.subnets: try: subnet = api.neutron.subnet_get( request, subnet_id) except Exception: continue if IPAddress(fixed_ip) in \ IPNetwork(subnet['cidr']): args['fixed_ips'] = [ {'subnet_id': subnet['id'], 'ip_address': fixed_ip}] break ep = client.pt_create(request, **args) nics.append({'port-id': ep.port_id}) pts.append(ep.id) meta_data = {'pts': ','.join(pts)} api.nova.server_create(request, instance_name, image_id, context['flavor'], context['keypair_id'], normalize_newlines(custom_script), security_groups=None, block_device_mapping=dev_mapping_1, block_device_mapping_v2=dev_mapping_2, nics=nics, availability_zone=avail_zone, instance_count=1, admin_pass=context['admin_pass'], disk_config=context.get('disk_config'), config_drive=context.get('config_drive'), meta=meta_data) count += 1 return True except Exception as e: error = _("Unable to launch member %(count)s with name %(name)s") msg = error % {'count': count, 'name': instance_name} LOG.error(str(e)) u = "horizon:project:policytargets:policy_targetdetails" policy_target_id = self.request.path.split("/")[-2] redirect = reverse(u, kwargs={'policy_target_id': policy_target_id}) exceptions.handle(request, msg, redirect=redirect) return False