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')
Exemple #2
0
    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