def load_config(self, context, xena_configs_folder): reservation_id = context.reservation.reservation_id my_api = CloudShellSessionContext(context).get_api() reservation_ports = get_reservation_resources( my_api, reservation_id, 'Xena Chassis Shell 2G.GenericTrafficGeneratorPort') for reserved_port in reservation_ports: config = get_family_attribute(my_api, reserved_port, 'Logical Name').Value.strip() address = get_address(reserved_port) self.logger.debug( 'Configuration {} will be loaded on Physical location {}'. format(config, address)) chassis = my_api.GetResourceDetails( reserved_port.Name.split('/')[0]) encripted_password = my_api.GetAttributeValue( chassis.Name, 'Xena Chassis Shell 2G.Password').Value password = CloudShellSessionContext( context).get_api().DecryptPassword(encripted_password).Value tcp_port = my_api.GetAttributeValue( chassis.Name, 'Xena Chassis Shell 2G.Controller TCP Port').Value if not tcp_port: tcp_port = '22611' ip, module, port = address.split('/') self.xm.session.add_chassis(ip, int(tcp_port), password) xena_port = XenaPort(self.xm.session.chassis_list[ip], '{}/{}'.format(module, port)) xena_port.reserve(force=True) xena_port.load_config( path.join(xena_configs_folder, config) + '.xpc')
def load_config(self, context, ixc_config): self.session = self.connection.createSession('ixchariot') self.session.startSession() self.session.loadConfiguration(ixc_config) reservation_id = context.reservation.reservation_id my_api = CloudShellSessionContext(context).get_api() src_resources = {} dst_resources = {} for ep in get_reservation_resources(my_api, reservation_id, 'Traffic Generator Test IP'): logical_name = my_api.GetAttributeValue( ep.Name, 'Logical Name').Value.strip() for end in logical_name.split(): flow_end = end.split('-')[0].lower() flow_index = int(end.split('-')[1]) if len( end.split('-')) == 2 else 1 if flow_end in ['src', 'source']: src_resources.setdefault(flow_index, []).append(ep.Name) elif flow_end in ['dst', 'destination']: dst_resources.setdefault(flow_index, []).append(ep.Name) else: raise Exception( 'Invalid logical name {} - {} not in [src, source, dst, destination]' .format(logical_name, flow_end)) flows_url = self._get_flows_url() flows = self.session.httpGet(flows_url) ids = [f.id for f in flows] if sorted(src_resources) != sorted(ids): raise Exception( 'Src resource ids {} do not match flow IDs {}'.format( src_resources, ids)) if sorted(dst_resources) != sorted(ids): raise Exception( 'Dst resource ids {} do not match flow IDs {}'.format( dst_resources, ids)) for id_ in ids: network_url = '{}/{}/network/'.format(flows_url, id_) self.session.httpDelete(network_url + 'sourceEndpoints') self.session.httpDelete(network_url + 'destinationEndpoints') for id_ in src_resources: for src_ep in src_resources[id_]: ep = self.ixchariotapi.createEndpoint( src_ep.split('/')[2], src_ep.split('/')[1]) self.session.httpPost('{}/{}/network/sourceEndpoints'.format( flows_url, id_), data=ep) for id_ in dst_resources: for src_ep in dst_resources[id_]: ep = self.ixchariotapi.createEndpoint( src_ep.split('/')[2], src_ep.split('/')[1]) self.session.httpPost( '{}/{}/network/destinationEndpoints'.format( flows_url, id_), data=ep) # In case of multiple eps delay is required to make sure configuration completed (based on trial and error). time.sleep(4) self.logger.info("Load Configuration Completed") return self.session.sessionId