def __init__(self): """ .. attention:: username/passwd from right place """ self._CONTRAIL_XSD = "http://www.contrailsystems.com/vnc_cfg.xsd" self._NAMESPACES = { 'a': 'http://www.w3.org/2003/05/soap-envelope', 'b': 'http://www.trustedcomputinggroup.org/2010/IFMAP/2', 'c': self._CONTRAIL_XSD } namespaces = { 'env': "http://www.w3.org/2003/05/soap-envelope", 'ifmap': "http://www.trustedcomputinggroup.org/2010/IFMAP/2", 'meta': "http://www.trustedcomputinggroup.org/" "2010/IFMAP-METADATA/2", 'contrail': self._CONTRAIL_XSD } self.parse_args() if self._args.verbose: logger.setLevel('DEBUG') mapclient = client(("%s" % (self._args.ip), "%s" % (self._args.port)), self._args.username, self._args.password, namespaces) result = mapclient.call('newSession', NewSessionRequest()) mapclient.set_session_id(newSessionResult(result).get_session_id()) mapclient.set_publisher_id(newSessionResult(result).get_publisher_id()) self._mapclient = mapclient self.soap_doc = None
def _connect_to_ifmap_servers(self): self._mapclients = [] mapclients = [] NAMESPACES = { 'env': "http://www.w3.org/2003/05/soap-envelope", 'ifmap': "http://www.trustedcomputinggroup.org/2010/IFMAP/2", 'meta': "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2", 'contrail': "http://www.contrailsystems.com/vnc_cfg.xsd" } ifmap_user, ifmap_passwd = self._args.ifmap_credentials.split(':') # pick ifmap servers from args to this utility and if absent # pick it from contrail-api conf file if self._args.ifmap_servers: ifmap_ips_ports = [(ip_port.split(':')) for ip_port in self._args.ifmap_servers] else: ifmap_ips_ports = [(self._api_args.ifmap_server_ip, self._api_args.ifmap_server_port)] for ifmap_ip, ifmap_port in ifmap_ips_ports: mapclient = client((ifmap_ip, ifmap_port), ifmap_user, ifmap_passwd, NAMESPACES) self._mapclients.append(mapclient) connected = False while not connected: try: result = mapclient.call('newSession', NewSessionRequest()) connected = True except socket.error as e: time.sleep(3) mapclient.set_session_id(newSessionResult(result).get_session_id()) mapclient.set_publisher_id(newSessionResult(result).get_publisher_id())
def __init__(self, db_client_mgr, ifmap_srv_ip, ifmap_srv_port, uname, passwd, ssl_options, ifmap_srv_loc = None): super(VncIfmapClient, self).__init__() # TODO username/passwd from right place self._CONTRAIL_XSD = "http://www.contrailsystems.com/vnc_cfg.xsd" self._IPERMS_NAME = "id-perms" self._IPERMS_FQ_NAME = "contrail:" + self._IPERMS_NAME self._SUBNETS_NAME = "contrail:subnets" self._IPAMS_NAME = "contrail:ipams" self._SG_RULE_NAME = "contrail:sg_rules" self._POLICY_ENTRY_NAME = "contrail:policy_entry" self._NAMESPACES = { 'a': 'http://www.w3.org/2003/05/soap-envelope', 'b': 'http://www.trustedcomputinggroup.org/2010/IFMAP/2', 'c': self._CONTRAIL_XSD } namespaces = { 'env' : "http://www.w3.org/2003/05/soap-envelope", 'ifmap' : "http://www.trustedcomputinggroup.org/2010/IFMAP/2", 'meta' : "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2", 'contrail' : self._CONTRAIL_XSD } self._db_client_mgr = db_client_mgr # launch mapserver if ifmap_srv_loc: self._launch_mapserver(ifmap_srv_ip, ifmap_srv_port, ifmap_srv_loc) mapclient = client(("%s" %(ifmap_srv_ip), "%s" %(ifmap_srv_port)), uname, passwd, namespaces, ssl_options) self._mapclient = mapclient connected = False while not connected: try: result = mapclient.call('newSession', NewSessionRequest()) connected = True except socket.error as e: time.sleep(3) mapclient.set_session_id(newSessionResult(result).get_session_id()) mapclient.set_publisher_id(newSessionResult(result).get_publisher_id()) # Initialize ifmap-id handler (alloc|convert|parse etc.) self._imid_handler = Imid() imid = self._imid_handler # Publish init config (TODO this should come from api-server init) # config-root buf = cStringIO.StringIO() perms = Provision.defaults.perms['config-root'] perms.exportChildren(buf, level = 1, pretty_print = False) id_perms_xml = buf.getvalue() buf.close() meta = str(Metadata(self._IPERMS_NAME, '', {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail', elements = id_perms_xml)) self._publish_id_self_meta("contrail:config-root:root", meta)
def __init__(self, db_client_mgr, ifmap_srv_ip, ifmap_srv_port, uname, passwd, ssl_options, ifmap_srv_loc=None): super(VncIfmapClient, self).__init__() # TODO username/passwd from right place self._CONTRAIL_XSD = "http://www.contrailsystems.com/vnc_cfg.xsd" self._IPERMS_NAME = "id-perms" self._IPERMS_FQ_NAME = "contrail:" + self._IPERMS_NAME self._SUBNETS_NAME = "contrail:subnets" self._IPAMS_NAME = "contrail:ipams" self._SG_RULE_NAME = "contrail:sg_rules" self._POLICY_ENTRY_NAME = "contrail:policy_entry" self._NAMESPACES = { 'env': "http://www.w3.org/2003/05/soap-envelope", 'ifmap': "http://www.trustedcomputinggroup.org/2010/IFMAP/2", 'meta': "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2", 'contrail': self._CONTRAIL_XSD } self._db_client_mgr = db_client_mgr # launch mapserver if ifmap_srv_loc: self._launch_mapserver(ifmap_srv_ip, ifmap_srv_port, ifmap_srv_loc) mapclient = client(("%s" % (ifmap_srv_ip), "%s" % (ifmap_srv_port)), uname, passwd, self._NAMESPACES, ssl_options) self._mapclient = mapclient connected = False while not connected: try: result = mapclient.call('newSession', NewSessionRequest()) connected = True except socket.error as e: time.sleep(3) mapclient.set_session_id(newSessionResult(result).get_session_id()) mapclient.set_publisher_id(newSessionResult(result).get_publisher_id()) # Initialize ifmap-id handler (alloc|convert|parse etc.) self._imid_handler = Imid() imid = self._imid_handler # Publish init config (TODO this should come from api-server init) # config-root buf = cStringIO.StringIO() perms = Provision.defaults.perms['config-root'] perms.exportChildren(buf, level=1, pretty_print=False) id_perms_xml = buf.getvalue() buf.close() meta = str(Metadata(self._IPERMS_NAME, '', {'ifmap-cardinality': 'singleValue'}, ns_prefix='contrail', elements=id_perms_xml)) self._publish_id_self_meta("contrail:config-root:root", meta)
def _init_conn(self): self._mapclient = client( ("%s" % (self._ifmap_srv_ip), "%s" % (self._ifmap_srv_port)), self._username, self._password, self._NAMESPACES, self._ssl_options) connected = False while not connected: try: resp_xml = self._mapclient.call('newSession', NewSessionRequest()) except socket.error as e: msg = 'Failed to establish IF-MAP connection: %s' % str(e) self.config_log(msg, level=SandeshLevel.SYS_WARN) time.sleep(3) continue resp_doc = etree.parse(StringIO.StringIO(resp_xml)) err_codes = resp_doc.xpath( '/env:Envelope/env:Body/ifmap:response/errorResult/@errorCode', namespaces=self._NAMESPACES) if not err_codes: connected = True else: msg = "Failed to establish IF-MAP connection: %s" % err_codes self.config_log(msg, level=SandeshLevel.SYS_WARN) session_id = self._mapclient.get_session_id() try: self._mapclient.call('endSession', EndSessionRequest(session_id)) except socket.error as e: msg = "Failed to end the IF-MAP session %s: %s" %\ (session_id, str(e)) self.config_log(msg, level=SandeshLevel.SYS_WARN) time.sleep(3) ConnectionState.update(conn_type=ConnectionType.IFMAP, name='IfMap', status=ConnectionStatus.UP, message='', server_addrs=[ "%s:%s" % (self._ifmap_srv_ip, self._ifmap_srv_port) ]) self._conn_state = ConnectionStatus.UP msg = 'IFMAP connection ESTABLISHED' self.config_log(msg, level=SandeshLevel.SYS_NOTICE) self._mapclient.set_session_id( newSessionResult(resp_xml).get_session_id()) self._mapclient.set_publisher_id( newSessionResult(resp_xml).get_publisher_id())
def _init_conn(self): self._mapclient = client(("%s" % (self._ifmap_srv_ip), "%s" % (self._ifmap_srv_port)), self._username, self._password, self._NAMESPACES, self._ssl_options) connected = False while not connected: try: resp_xml = self._mapclient.call('newSession', NewSessionRequest()) except socket.error as e: msg = 'Failed to establish IF-MAP connection: %s' % str(e) self.config_log(msg, level=SandeshLevel.SYS_WARN) time.sleep(3) continue resp_doc = etree.parse(StringIO.StringIO(resp_xml)) err_codes = resp_doc.xpath( '/env:Envelope/env:Body/ifmap:response/errorResult/@errorCode', namespaces=self._NAMESPACES) if not err_codes: connected = True else: msg = "Failed to establish IF-MAP connection: %s" % err_codes self.config_log(msg, level=SandeshLevel.SYS_WARN) session_id = self._mapclient.get_session_id() try: self._mapclient.call('endSession', EndSessionRequest(session_id)) except socket.error as e: msg = "Failed to end the IF-MAP session %s: %s" %\ (session_id, str(e)) self.config_log(msg, level=SandeshLevel.SYS_WARN) time.sleep(3) ConnectionState.update(conn_type = ConnectionType.IFMAP, name = 'IfMap', status = ConnectionStatus.UP, message = '', server_addrs = ["%s:%s" % (self._ifmap_srv_ip, self._ifmap_srv_port)]) self._conn_state = ConnectionStatus.UP msg = 'IFMAP connection ESTABLISHED' self.config_log(msg, level=SandeshLevel.SYS_NOTICE) self._mapclient.set_session_id( newSessionResult(resp_xml).get_session_id()) self._mapclient.set_publisher_id( newSessionResult(resp_xml).get_publisher_id())