def show_arp(cls, client_obj, show_arp=None): _ = show_arp parser = "raw/horizontalTable" endpoint = "get arp" expect_prompt = ["--More--", ">"] # Execute the command on the NSXManager raw_payload = client_obj.connection. \ request(endpoint, expect_prompt).response_data # Get the parser data_parser = utilities.get_data_parser(parser) raw_payload = data_parser.marshal_raw_data(raw_payload, 'Hardware Addr', 'HardwareAddr') # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, skip_tail=2) # Close the expect connection object client_obj.connection.close() return show_arp_schema.ShowArpSchema(pydict)
def get_ping_output(cls, client_obj, ip=None, hostname=None, get_ping_output=None): _ = get_ping_output if ip is not None: endpoint = "ping " + ip elif hostname is not None: endpoint = "ping " + hostname else: raise ValueError("Received empty hostname/IP") expect_prompt = ["--More--", ">"] # 'Ctrl + C' required to terminate the ping execution control_key = 'c' # Sleeping for 5 seconds to collect sizable ping responses sleep = 5 raw_payload = client_obj.connection.request(endpoint, expect_prompt, control_key, sleep).response_data # Close the expect connection object client_obj.connection.close() # Get the parser parser = "raw/pingHost" data_parser = utilities.get_data_parser(parser) pydict = data_parser.get_parsed_data(raw_payload) return pydict
def show_ip_route(cls, client_obj, **kwargs): """ nsxmanager> show ip route default via 10.112.11.253 dev mgmt metric 203 10.112.10.0/23 via 10.112.11.253 dev mgmt 10.112.10.0/23 dev mgmt proto kernel scope link src 10.112.11.27 metric 203 """ endpoint = "show ip route" expect_prompt = ['bytes *', '>'] if 'cidr' in kwargs: if kwargs['cidr']: endpoint = endpoint + " " + kwargs['cidr'] else: raise ValueError("Received empty cidr") raw_payload = client_obj.connection.request( endpoint, expect_prompt).response_data # Close the expect connection object client_obj.connection.close() # Get the parser parser = "raw/showIpRoute" data_parser = utilities.get_data_parser(parser) return data_parser.get_parsed_data(raw_payload)
def show_ip_route(cls, client_obj, **kwargs): """ nsxmanager> show ip route default via 10.112.11.253 dev mgmt metric 203 10.112.10.0/23 via 10.112.11.253 dev mgmt 10.112.10.0/23 dev mgmt proto kernel scope link src 10.112.11.27 metric 203 """ endpoint = "show ip route" expect_prompt = ['bytes *', '>'] if 'cidr' in kwargs: if kwargs['cidr']: endpoint = endpoint + " " + kwargs['cidr'] else: raise ValueError("Received empty cidr") raw_payload = client_obj.connection.request( endpoint, expect_prompt).response_data # Close the expect connection object client_obj.connection.close() # Get the parser parser = "raw/showIpRoute" data_parser = utilities.get_data_parser(parser) return data_parser.get_parsed_data(raw_payload)
def get_ntp_associations(cls, client_obj, **kwargs): """ vdnet-nsxmanager(config)# show ntp associations remote local st poll reach delay offset disp ======================================================================= *LOCAL(0) 127.0.0.1 3 64 1 0.00000 0.000000 2.81735 =scrootdc02.vmwa 10.110.31.231 2 64 1 0.21999 -8.864582 2.81874 """ endpoint = "show ntp associations" expect_prompt = ['bytes *', '>'] raw_payload = client_obj.connection.request( endpoint, expect_prompt).response_data # Get the parser parser = "raw/horizontalTable" data_parser = utilities.get_data_parser(parser) # Horizontal table parser doesn't support any particular line deletion # in the table. Removing first two lines and creating a new header header_keys = \ ['remote', 'local', 'st', 'poll', 'reach', 'delay', 'offset', 'disp'] raw_payload_with_header = \ data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=2) pydict = data_parser.get_parsed_data( raw_payload_with_header, skip_head=2, skip_tail=1) # Close the expect connection object client_obj.connection.close() return show_ntp_associations_schema.ShowNtpAssociationsSchema(pydict)
def get_ping_output(cls, client_obj, ip=None, hostname=None, get_ping_output=None): _ = get_ping_output if ip is not None: endpoint = "ping " + ip elif hostname is not None: endpoint = "ping " + hostname else: raise ValueError("Received empty hostname/IP") expect_prompt = ["--More--", ">"] # 'Ctrl + C' required to terminate the ping execution control_key = 'c' # Sleeping for 5 seconds to collect sizable ping responses sleep = 5 raw_payload = client_obj.connection.request( endpoint, expect_prompt, control_key, sleep).response_data # Close the expect connection object client_obj.connection.close() # Get the parser parser = "raw/pingHost" data_parser = utilities.get_data_parser(parser) pydict = data_parser.get_parsed_data(raw_payload) return pydict
def get_ip_bgp(self, server_dict, edge_ha_index="0", get_ip_bgp=None): """ Sample Output of command show ip bgp: Status codes: s - suppressed, d - damped, > - best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Origin > 100.64.1.0/31 169.0.0.1 0 100 32768 ? > 192.168.40.0/24 192.168.50.2 0 100 60 i > 192.168.50.0/24 192.168.50.2 0 100 60 i > 192.168.60.0/24 169.0.0.1 0 100 32768 ? > 192.168.70.0/24 169.0.0.1 0 100 32768 ? """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP BGP using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" %(self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = { 'cmdstr': 'show ip bgp' } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) header_keys = ['Scode', 'Network', 'NextHop', 'Metric', 'LocPrf', 'Weight', 'Origin'] # No. of Header lines to be skipped from output skip_head = 4 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data(raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("get_ip_bgp returned pydict: %s", pydict) return pydict
def get_ip_bgp(self, server_dict, edge_ha_index="0", get_ip_bgp=None): """ Sample Output of command show ip bgp: Status codes: s - suppressed, d - damped, > - best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Origin > 100.64.1.0/31 169.0.0.1 0 100 32768 ? > 192.168.40.0/24 192.168.50.2 0 100 60 i > 192.168.50.0/24 192.168.50.2 0 100 60 i > 192.168.60.0/24 169.0.0.1 0 100 32768 ? > 192.168.70.0/24 169.0.0.1 0 100 32768 ? """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP BGP using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" % ( self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = {'cmdstr': 'show ip bgp'} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) header_keys = [ 'Scode', 'Network', 'NextHop', 'Metric', 'LocPrf', 'Weight', 'Origin' ] # No. of Header lines to be skipped from output skip_head = 4 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("get_ip_bgp returned pydict: %s", pydict) return pydict
def get_ip_bgp_neighbors(self, server_dict, edge_ha_index="0", get_ip_bgp_neighbors=None): """ CLI output for show ip bgp neighbors BGP neighbor is 192.168.50.2, remote AS 200, BGP state = Established, up Hold time is 180, Keep alive interval is 60 seconds Neighbor capabilities: Route refresh: advertised and received Address family IPv4 Unicast:advertised and received Graceful restart Capability:none Restart remain time: 0 Received 95 messages, Sent 99 messages Default minimum time between advertisement runs is 30 seconds For Address family IPv4 Unicast:advertised and received Index 1 Identifier 0x5fc5f6ec Route refresh request:received 0 sent 0 Prefixes received 2 sent 2 advertised 2 Connections established 3, dropped 62 Local host: 192.168.50.1, Local port: 179 Remote host: 192.168.50.2, Remote port: 47813 """ PARSER = "raw/showBgpNeighbors" pylogger.info("Getting Edge IP BGP Neighbors using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" % ( self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) endpoint = "show ip bgp neighbors" pylogger.debug("Command to be executed: %s", endpoint) py_dict = {'cmdstr': endpoint} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) # Execute the command on the Edge VM raw_payload = result_obj[0].response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, delimiter=":") pylogger.debug("get_ip_bgp_neighbors returned pydict: %s", pydict) return pydict
def get_ip_bgp_neighbors(self, server_dict, edge_ha_index="0", get_ip_bgp_neighbors=None): """ CLI output for show ip bgp neighbors BGP neighbor is 192.168.50.2, remote AS 200, BGP state = Established, up Hold time is 180, Keep alive interval is 60 seconds Neighbor capabilities: Route refresh: advertised and received Address family IPv4 Unicast:advertised and received Graceful restart Capability:none Restart remain time: 0 Received 95 messages, Sent 99 messages Default minimum time between advertisement runs is 30 seconds For Address family IPv4 Unicast:advertised and received Index 1 Identifier 0x5fc5f6ec Route refresh request:received 0 sent 0 Prefixes received 2 sent 2 advertised 2 Connections established 3, dropped 62 Local host: 192.168.50.1, Local port: 179 Remote host: 192.168.50.2, Remote port: 47813 """ PARSER = "raw/showBgpNeighbors" pylogger.info("Getting Edge IP BGP Neighbors using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" %(self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) endpoint = "show ip bgp neighbors" pylogger.debug("Command to be executed: %s", endpoint) py_dict = { 'cmdstr': endpoint } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) # Execute the command on the Edge VM raw_payload = result_obj[0].response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, delimiter=":") pylogger.debug("get_ip_bgp_neighbors returned pydict: %s", pydict) return pydict
def read_system_memory(cls, client_obj, **kwargs): client_obj.connection.login_to_st_en_terminal(expect=['#']) endpoint = "cat /proc/meminfo" parser = "raw/systemMeminfo" expect_prompt = ['bytes*', '#'] raw_payload = client_obj.connection.request(endpoint, expect_prompt)\ .response_data data_parser = utilities.get_data_parser(parser) client_obj.connection.close() return data_parser.get_parsed_data(raw_payload)
def read_system_memory(cls, client_obj, **kwargs): client_obj.connection.login_to_st_en_terminal(expect=['#']) endpoint = "cat /proc/meminfo" parser = "raw/systemMeminfo" expect_prompt = ['bytes*', '#'] raw_payload = client_obj.connection.request(endpoint, expect_prompt)\ .response_data data_parser = utilities.get_data_parser(parser) client_obj.connection.close() return data_parser.get_parsed_data(raw_payload)
def get_ip_bgp_neighbors(cls, client_object, ip_address=None, get_ip_bgp_neighbors=None): """ NSXEdge> show ip bgp neighbors 192.168.50.2 BGP neighbor is 192.168.50.2, remote AS 200, BGP state = Established, up Hold time is 180, Keep alive interval is 60 seconds Neighbor capabilities: Route refresh: advertised and received Address family IPv4 Unicast:advertised and received Graceful restart Capability:none Restart remain time: 0 Received 95 messages, Sent 99 messages Default minimum time between advertisement runs is 30 seconds For Address family IPv4 Unicast:advertised and received Index 1 Identifier 0x5fc5f6ec Route refresh request:received 0 sent 0 Prefixes received 2 sent 2 advertised 2 Connections established 3, dropped 62 Local host: 192.168.50.1, Local port: 179 Remote host: 192.168.50.2, Remote port: 47813 NSXEdge> """ if ip_address is None: raise ValueError("IP address must be a valid value. " "Provided: %r" % ip_address) endpoint = "show ip bgp neighbors " + ip_address PARSER = "raw/showBgpNeighbors" # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, delimiter=":") # Close the expect connection object client_object.connection.close() get_ip_bgp_neighbors_schema_object = get_ip_bgp_neighbors_schema. \ GetIPBGPNeighborsSchema(pydict) return get_ip_bgp_neighbors_schema_object
def get_cluster_startupnodes(cls, client_object, **kwargs): cmd = "get control-cluster startup-nodes" expect = ['bytes*', '>'] raw_data = client_object.connection.request(cmd, expect).response_data header_keys = ['controller_ip'] data_parser = utilities.get_data_parser(cls.HORIZONTAL_PARSER_TYPE) mod_raw_data = data_parser.insert_header_to_raw_data( raw_data, header_keys=header_keys) mapped_pydicts = utilities.parse_data_map_attributes( mod_raw_data, cls.HORIZONTAL_PARSER_TYPE, attribute_map=None) return cluster_node_schema.ClusterStartupNodesSchema(mapped_pydicts)
def get_ip_ospf_neighbor(self, server_dict, edge_ha_index="0", get_ip_ospf_neighbor=None): """ Sample Command output: Neigbhor ID Priority Address Dead Time State 2.2.2.2 128 192.168.1.50 38 Full/BDR """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP OSPF Neighbor using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" \ % (self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = \ 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = {'cmdstr': 'show ip ospf neighbor'} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) # Insert the Header skip_head = 1 header_keys = [ 'neigbhor_id', 'priority', 'address', 'dead_time', 'state' ] # noqa mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("Get IP OSPF Neighbor returned pydict: %s", pydict) return pydict
def get_ip_ospf_neighbor(self, server_dict, edge_ha_index="0", get_ip_ospf_neighbor=None): """ Sample Command output: Neigbhor ID Priority Address Dead Time State 2.2.2.2 128 192.168.1.50 38 Full/BDR """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP OSPF Neighbor using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" \ % (self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = \ 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = { 'cmdstr': 'show ip ospf neighbor' } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) # Insert the Header skip_head = 1 header_keys = ['neigbhor_id', 'priority', 'address', 'dead_time', 'state'] # noqa mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("Get IP OSPF Neighbor returned pydict: %s", pydict) return pydict
def get_process_monitor(cls, client_obj, **kwargs): endpoint = "show process monitor" expect_prompt = ["#", ">", "\'"] ctrl_key = 'C' wait = 2 raw_payload = client_obj.connection.request( endpoint, expect_prompt, ctrl_key, wait).response_data parser = "raw/showProcessMonitor" data_parser = utilities.get_data_parser(parser) pydict = data_parser.get_parsed_data(raw_payload) return show_process_monitor_schema.ShowProcessMonitorSchema(pydict)
def get_ip_bgp_neighbors(cls, client_object, ip_address=None, get_ip_bgp_neighbors=None): """ NSXEdge> show ip bgp neighbors 192.168.50.2 BGP neighbor is 192.168.50.2, remote AS 200, BGP state = Established, up Hold time is 180, Keep alive interval is 60 seconds Neighbor capabilities: Route refresh: advertised and received Address family IPv4 Unicast:advertised and received Graceful restart Capability:none Restart remain time: 0 Received 95 messages, Sent 99 messages Default minimum time between advertisement runs is 30 seconds For Address family IPv4 Unicast:advertised and received Index 1 Identifier 0x5fc5f6ec Route refresh request:received 0 sent 0 Prefixes received 2 sent 2 advertised 2 Connections established 3, dropped 62 Local host: 192.168.50.1, Local port: 179 Remote host: 192.168.50.2, Remote port: 47813 NSXEdge> """ if ip_address is None: raise ValueError("IP address must be a valid value. " "Provided: %r" % ip_address) endpoint = "show ip bgp neighbors " + ip_address PARSER = "raw/showBgpNeighbors" # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, delimiter=":") # Close the expect connection object client_object.connection.close() get_ip_bgp_neighbors_schema_object = get_ip_bgp_neighbors_schema. \ GetIPBGPNeighborsSchema(pydict) return get_ip_bgp_neighbors_schema_object
def get_process_monitor(cls, client_obj, **kwargs): endpoint = "show process monitor" expect_prompt = ["#", ">", "\'"] ctrl_key = 'C' wait = 2 raw_payload = client_obj.connection.request(endpoint, expect_prompt, ctrl_key, wait).response_data parser = "raw/showProcessMonitor" data_parser = utilities.get_data_parser(parser) pydict = data_parser.get_parsed_data(raw_payload) return show_process_monitor_schema.ShowProcessMonitorSchema(pydict)
def get_ip_forwarding(self, server_dict, edge_ha_index="0", get_ip_forwarding=None): pylogger.info("Getting Edge IP Forwarding using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/" + self.id + "/appliances/" + edge_ha_index + "?action=execute" self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = {'cmdstr': 'show ip forwarding'} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) PARSER = "raw/horizontalTable" header_keys = ['Code', 'Network', 'Via', 'NextHop', 'VnicName'] # noqa # No. of Header lines to be skipped from output skip_head = 2 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) raw_payload = data_parser.marshal_raw_data(raw_payload, 'is directly connected,', 'isdirectlyconnected NULL') # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) return pydict
def get_cluster_managers(cls, client_object, **kwargs): cmd = "get managers" expect = ['bytes*', '>'] raw_data = client_object.connection.request(cmd, expect).response_data mod_raw_data = raw_data.replace(':', ' ') header_keys = ['ip', 'port', 'thumbprint'] data_parser = utilities.get_data_parser(cls.HORIZONTAL_PARSER_TYPE) mod_raw_data = data_parser.insert_header_to_raw_data( mod_raw_data, header_keys=header_keys) mapped_pydicts = utilities.parse_data_map_attributes( mod_raw_data, cls.HORIZONTAL_PARSER_TYPE, attribute_map=None, skip_tail=1) return cluster_node_schema.ClusterManagerNodesSchema(mapped_pydicts)
def show_ip_sockets(cls, client_obj, **kwargs): parser = "raw/horizontalTable" endpoint = "show ip sockets" expect_prompt = ["--More--", ">"] # Execute the command on the NSXManager raw_payload = client_obj.connection. \ request(endpoint, expect_prompt).response_data # Get the parser data_parser = utilities.get_data_parser(parser) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, skip_tail=2) # Close the expect connection object client_obj.connection.close() return show_ip_sockets_schema.ShowIPSocketsSchema(pydict)
def show_ip_sockets(cls, client_obj, **kwargs): parser = "raw/horizontalTable" endpoint = "show ip sockets" expect_prompt = ["--More--", ">"] # Execute the command on the NSXManager raw_payload = client_obj.connection. \ request(endpoint, expect_prompt).response_data # Get the parser data_parser = utilities.get_data_parser(parser) # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, skip_tail=2) # Close the expect connection object client_obj.connection.close() return show_ip_sockets_schema.ShowIPSocketsSchema(pydict)
def get_dir_list(cls, client_obj, get_dir_list=None): """ Sample output of 'dir' CLI nsx-manager> dir Directory of filestore:/ -rwx 126626 Dec 04 2014 07:30:05 UTC tech.tzg -rwx 127268 Dec 04 2014 07:33:17 UTC tech02.tzg -rwx 152582 Dec 04 2014 09:33:24 UTC tech_support.tgz -rwx 162002 Dec 04 2014 10:27:17 UTC tech_support_logs.tgz -rwx 0 Dec 04 2014 07:10:13 UTC text.file """ _ = get_dir_list endpoint = "get files" expect_prompt = ["--More--", ">"] raw_payload = client_obj.connection.request(endpoint, expect_prompt)\ .response_data # Get the parser parser = "raw/horizontalTable" data_parser = utilities.get_data_parser(parser) # Creating header as CLI returns list without column name header_keys = \ ['permissions', 'size', 'month', 'date', 'year', 'time', 'TZ', 'file_name'] raw_payload_with_header = \ data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=2) pydict = data_parser.get_parsed_data(raw_payload_with_header, header_keys=header_keys, skip_head=2, skip_tail=1) # Close the expect connection object client_obj.connection.close() return dir_schema.DirSchema(pydict)
def get_ip_forwarding(self, server_dict, edge_ha_index="0", get_ip_forwarding=None): pylogger.info("Getting Edge IP Forwarding using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/" + self.id + "/appliances/" + edge_ha_index + "?action=execute" self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = { 'cmdstr': 'show ip forwarding' } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) PARSER = "raw/horizontalTable" header_keys = ['Code', 'Network', 'Via', 'NextHop', 'VnicName'] # noqa # No. of Header lines to be skipped from output skip_head = 2 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) # Get the parser data_parser = utilities.get_data_parser(PARSER) raw_payload = data_parser.marshal_raw_data(raw_payload, 'is directly connected,','isdirectlyconnected NULL') # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data(raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) return pydict
def get_dir_list(cls, client_obj, get_dir_list=None): """ Sample output of 'dir' CLI nsx-manager> dir Directory of filestore:/ -rwx 126626 Dec 04 2014 07:30:05 UTC tech.tzg -rwx 127268 Dec 04 2014 07:33:17 UTC tech02.tzg -rwx 152582 Dec 04 2014 09:33:24 UTC tech_support.tgz -rwx 162002 Dec 04 2014 10:27:17 UTC tech_support_logs.tgz -rwx 0 Dec 04 2014 07:10:13 UTC text.file """ _ = get_dir_list endpoint = "get files" expect_prompt = ["--More--", ">"] raw_payload = client_obj.connection.request(endpoint, expect_prompt)\ .response_data # Get the parser parser = "raw/horizontalTable" data_parser = utilities.get_data_parser(parser) # Creating header as CLI returns list without column name header_keys = \ ['permissions', 'size', 'month', 'date', 'year', 'time', 'TZ', 'file_name'] raw_payload_with_header = \ data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=2) pydict = data_parser.get_parsed_data( raw_payload_with_header, header_keys=header_keys, skip_head=2, skip_tail=1) # Close the expect connection object client_obj.connection.close() return dir_schema.DirSchema(pydict)
def get_ntp_associations(cls, client_obj, **kwargs): """ vdnet-nsxmanager(config)# show ntp associations remote local st poll reach delay offset disp ======================================================================= *LOCAL(0) 127.0.0.1 3 64 1 0.00000 0.000000 2.81735 =scrootdc02.vmwa 10.110.31.231 2 64 1 0.21999 -8.864582 2.81874 """ endpoint = "show ntp associations" expect_prompt = ['bytes *', '>'] raw_payload = client_obj.connection.request( endpoint, expect_prompt).response_data # Get the parser parser = "raw/horizontalTable" data_parser = utilities.get_data_parser(parser) # Horizontal table parser doesn't support any particular line deletion # in the table. Removing first two lines and creating a new header header_keys = \ ['remote', 'local', 'st', 'poll', 'reach', 'delay', 'offset', 'disp'] raw_payload_with_header = \ data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=2) pydict = data_parser.get_parsed_data(raw_payload_with_header, skip_head=2, skip_tail=1) # Close the expect connection object client_obj.connection.close() return show_ntp_associations_schema.ShowNtpAssociationsSchema(pydict)
def show_arp(cls, client_obj, show_arp=None): _ = show_arp parser = "raw/horizontalTable" endpoint = "get arp" expect_prompt = ["--More--", ">"] # Execute the command on the NSXManager raw_payload = client_obj.connection. \ request(endpoint, expect_prompt).response_data # Get the parser data_parser = utilities.get_data_parser(parser) raw_payload = data_parser.marshal_raw_data( raw_payload, 'Hardware Addr', 'HardwareAddr') # Get the parsed data pydict = data_parser.get_parsed_data(raw_payload, skip_tail=2) # Close the expect connection object client_obj.connection.close() return show_arp_schema.ShowArpSchema(pydict)
def get_ip_route(cls, client_object, route_filter=None, prefix=None, get_ip_route=None): """ NSXEdge> show ip route Codes: O - OSPF derived, i - IS-IS derived, B - BGP derived, C - connected, S - static, L1 - IS-IS level-1, L2 - IS-IS level-2, IA - OSPF inter area, E1 - OSPF external type 1, E2 - OSPF external type 2, # noqa N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 Total number of routes: 4 C 10.110.60.0/22 [0/0] via 10.110.63.114 C 169.0.0.0/28 [0/0] via 169.0.0.2 C 169.255.255.240/28 [0/0] via 169.255.255.241 C 192.168.3.0/24 [0/0] via 192.168.3.1 NSXEdge> """ PARSER = "raw/horizontalTable" VALID_ROUTE_FILTERS = ['bgp', 'connected', 'static'] get_ip_route_command = ["show ip route"] if route_filter is None: skip_head = 6 elif route_filter not in VALID_ROUTE_FILTERS: raise ValueError("Invalid route filter: %r. Valid values are : %r" % (route_filter, VALID_ROUTE_FILTERS)) else: skip_head = 4 get_ip_route_command.append(route_filter) if prefix: get_ip_route_command.append(prefix) endpoint = " ".join(get_ip_route_command) # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output header_keys = ['Code', 'Network', 'AdminDist_Metric', 'Via', 'NextHop'] mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) # Close the expect connection object client_object.connection.close() get_ip_route_schema_object = get_ip_route_schema. \ GetIPRouteSchema(pydict) if route_filter and prefix: return get_ip_route_schema_object.table[0] return get_ip_route_schema_object
def get_ip_ospf_database(self, server_dict, edge_ha_index="0", area_id=None, search_filter=None, get_ip_ospf_database=None): """ Sample Command output: Router Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 1.1.1.1 1.1.1.1 1686 0x8000002e 0x0000ca16 2.2.2.2 2.2.2.2 1686 0x80000002 0x0000c83d Network Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 192.168.1.51 1.1.1.1 1691 0x80000001 0x00001d8f Opaque Area Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 1.0.0.1 1.1.1.1 551 0x8000002e 0x00002957 1.0.0.2 1.1.1.1 488 0x8000002e 0x0000be1a 1.0.0.3 2.2.2.2 1691 0x80000001 0x0000689a Type-7 AS External Link States (Area 0.0.0.51) Link ID ADV Router Age Seq Num Checksum 10.110.60.0 1.1.1.1 492 0x8000002e 0x000017d8 172.168.1.0 1.1.1.1 492 0x8000002e 0x0000b496 192.168.1.0 1.1.1.1 492 0x8000002e 0x0000af87 Opaque Area Link States (Area 0.0.0.51) Link ID ADV Router Age Seq Num Checksum 1.0.0.1 1.1.1.1 551 0x8000002e 0x0000ceab 1.0.0.2 1.1.1.1 488 0x8000002e 0x0000646e AS External Link States Link ID ADV Router Age Seq Num Checksum 10.10.10.0 2.2.2.2 1691 0x80000001 0x00003d6f 10.110.60.0 1.1.1.1 492 0x8000002e 0x000015da 172.168.1.0 1.1.1.1 492 0x8000002e 0x0000b298 192.168.1.0 1.1.1.1 492 0x8000002e 0x0000ad89 192.168.1.0 2.2.2.2 1691 0x80000001 0x0000e976 """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP OSPF Database using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" \ % (self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = \ 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = {'cmdstr': 'show ip ospf database'} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) search_values = [ 'Summary_NLS', 'RLS', 'NLS', 'OALS', 'Summary_ASB', 'Type7_AS', 'AS_ExternalLink' ] search_filter = area_id['search_filter'] pylogger.debug("Search Filter: %s ", search_filter) if search_filter not in search_values: raise ValueError( "Invalid search_filter name: %r. Valid searchfilter values are : %r" % (search_filter, search_values)) area_id = area_id['area_id'] pylogger.debug("Area ID: %s ", area_id) raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) search_dict = { 'Summary_NLS': 'Summary Network Link States', 'RLS': 'Router Link States', 'NLS': 'Network Link States', 'OALS': 'Opaque Area Link States', 'Summary_ASB': 'Summary ASB Link States', 'Type7_AS': 'Type-7 AS External Link States', 'AS_ExternalLink': 'AS External Link States' } search_string = search_dict[ search_filter] + " (Area 0.0.0." + area_id + ")" include_lines = [] if raw_payload.__contains__(search_string): lines = raw_payload.strip().split("\n") for i, line in enumerate(lines): if line.find(search_string) != -1: i += 1 while lines[i].find("Link States") == -1: include_lines.append(lines[i]) i += 1 if i == len(lines): break include_lines = '\n'.join(include_lines) raw_payload = include_lines # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output skip_head = 1 header_keys = ['link_id', 'adv_router', 'age', 'seq_num', 'checksum'] mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("Get IP OSPF Database returned pydict: %s", pydict) return pydict
def get_ip_route(self, server_dict, edge_ha_index="0", get_ip_route=None): pylogger.info("Getting Edge IP Route using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/" + self.id + "/appliances/" + edge_ha_index + "?action=execute" self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = {'cmdstr': 'show ip route'} schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) PARSER = "raw/horizontalTable" header_keys = ['Code', 'Network', 'AdminDist_Metric', 'Via', 'NextHop'] # No. of Header lines to be skipped from output skip_head = 6 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) #--------------------------------------------------------------- # If the raw_payload contains OSPF data we have modify the header # and insert NUL element at the second place to parse the data properly # # # C 3.3.3.0/24 [0/0] via 3.3.3.1 # O E2 4.4.4.0/24 [110/0] via 10.10.10.2 ----> this addition requires below change # noqa # C 10.10.10.0/24 [0/0] via 10.10.10.1 # O 10.10.10.0/24 [0/0] via 10.10.10.1 # # After parsing the output will be, Inserting NULL into the second field # # C NULL 3.3.3.0/24 [0/0] via 3.3.3.1 # O E2 4.4.4.0/24 [110/0] via 10.10.10.2 # C NULL 10.10.10.0/24 [0/0] via 10.10.10.1 # O NULL 10.10.10.0/24 [0/0] via 10.10.10.1 # #--------------------------------------------------------------- if raw_payload.__contains__("O"): include_lines = [] header_keys = [ 'Code', 'OSPF_ExternalType', 'Network', 'AdminDist_Metric', 'Via', 'NextHop' ] lines = raw_payload.strip().split("\n") for line in lines[:skip_head]: include_lines.append(line) for line in lines[skip_head:]: if (line.strip() != ""): templine = line.split() pattern = '[A-Z]+' matched = re.match(pattern, templine[1]) if not matched: templine.insert(1, "NULL") templine = " ".join(templine) print templine include_lines.append(templine) else: include_lines.append(line) include_lines = '\n'.join(include_lines) raw_payload = include_lines # Get the parser data_parser = utilities.get_data_parser(PARSER) mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) return pydict
def get_ip(cls, client_object, table_name=None, get_ip=None): """ Sample Output of command show ip forwarding: Codes: C - connected, R - remote, > - selected route, * - FIB route R>* 0.0.0.0/0 via 10.24.31.253, vNic_3 C>* 10.24.28.0/22 is directly connected, vNic_3 C>* 20.20.20.0/24 is directly connected, vNic_2 C>* 50.50.50.0/24 is directly connected, vNic_0 #Sample Output of command show ip bgp: NSXEdge> show ip bgp Status codes: s - suppressed, d - damped, > - best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Origin > 100.64.1.0/31 169.0.0.1 0 100 32768 ? > 192.168.40.0/24 192.168.50.2 0 100 60 i > 192.168.50.0/24 192.168.50.2 0 100 60 i > 192.168.60.0/24 169.0.0.1 0 100 32768 ? > 192.168.70.0/24 169.0.0.1 0 100 32768 ? """ BGP_TABLE = 'bgp' FORWARDING_TABLE = 'forwarding' PARSER = "raw/horizontalTable" VALID_TABLES = [FORWARDING_TABLE, BGP_TABLE] get_ip_command = "show ip %s" header_keys = None skip_head = None header_skip_dict = { 'forwarding': { 'header_keys': ['Code', 'Network', 'Via', 'NextHop', 'VnicName'], # noqa 'skip_head': 2 }, 'bgp': { 'header_keys': ['Scode', 'Network', 'NextHop', 'Metric', 'LocPrf', 'Weight', 'Origin'], # noqa 'skip_head': 3 } } if table_name not in VALID_TABLES: raise ValueError("Invalid table name: %r. Valid values are : %r" % (table_name, VALID_TABLES)) endpoint = get_ip_command % table_name header_keys = header_skip_dict[table_name]['header_keys'] # No. of Header lines to be skipped from output skip_head = header_skip_dict[table_name]['skip_head'] # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) if table_name == FORWARDING_TABLE: raw_payload = data_parser.marshal_raw_data( raw_payload, 'is directly connected,', 'isdirectlyconnected NULL') # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) # Close the expect connection object client_object.connection.close() if table_name == FORWARDING_TABLE: get_ip_schema_object = get_ip_forwarding_schema. \ GetIPForwardingSchema(pydict) elif table_name == BGP_TABLE: get_ip_schema_object = get_ip_bgp_schema.GetIPBGPSchema(pydict) return get_ip_schema_object
def get_ip_ospf_database(self, server_dict, edge_ha_index="0", area_id=None, search_filter=None, get_ip_ospf_database=None): """ Sample Command output: Router Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 1.1.1.1 1.1.1.1 1686 0x8000002e 0x0000ca16 2.2.2.2 2.2.2.2 1686 0x80000002 0x0000c83d Network Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 192.168.1.51 1.1.1.1 1691 0x80000001 0x00001d8f Opaque Area Link States (Area 0.0.0.0) Link ID ADV Router Age Seq Num Checksum 1.0.0.1 1.1.1.1 551 0x8000002e 0x00002957 1.0.0.2 1.1.1.1 488 0x8000002e 0x0000be1a 1.0.0.3 2.2.2.2 1691 0x80000001 0x0000689a Type-7 AS External Link States (Area 0.0.0.51) Link ID ADV Router Age Seq Num Checksum 10.110.60.0 1.1.1.1 492 0x8000002e 0x000017d8 172.168.1.0 1.1.1.1 492 0x8000002e 0x0000b496 192.168.1.0 1.1.1.1 492 0x8000002e 0x0000af87 Opaque Area Link States (Area 0.0.0.51) Link ID ADV Router Age Seq Num Checksum 1.0.0.1 1.1.1.1 551 0x8000002e 0x0000ceab 1.0.0.2 1.1.1.1 488 0x8000002e 0x0000646e AS External Link States Link ID ADV Router Age Seq Num Checksum 10.10.10.0 2.2.2.2 1691 0x80000001 0x00003d6f 10.110.60.0 1.1.1.1 492 0x8000002e 0x000015da 172.168.1.0 1.1.1.1 492 0x8000002e 0x0000b298 192.168.1.0 1.1.1.1 492 0x8000002e 0x0000ad89 192.168.1.0 2.2.2.2 1691 0x80000001 0x0000e976 """ PARSER = "raw/horizontalTable" pylogger.info("Getting Edge IP OSPF Database using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/%s/appliances/%s?action=execute" \ % (self.id, edge_ha_index) self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = \ 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = { 'cmdstr': 'show ip ospf database' } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) search_values = ['Summary_NLS', 'RLS', 'NLS', 'OALS', 'Summary_ASB', 'Type7_AS', 'AS_ExternalLink'] search_filter = area_id['search_filter'] pylogger.debug("Search Filter: %s ", search_filter) if search_filter not in search_values: raise ValueError("Invalid search_filter name: %r. Valid searchfilter values are : %r" % (search_filter, search_values)) area_id = area_id['area_id'] pylogger.debug("Area ID: %s ", area_id) raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) search_dict = { 'Summary_NLS': 'Summary Network Link States', 'RLS': 'Router Link States', 'NLS': 'Network Link States', 'OALS': 'Opaque Area Link States', 'Summary_ASB': 'Summary ASB Link States', 'Type7_AS': 'Type-7 AS External Link States', 'AS_ExternalLink': 'AS External Link States' } search_string = search_dict[search_filter] + " (Area 0.0.0." + area_id + ")" include_lines = [] if raw_payload.__contains__(search_string): lines = raw_payload.strip().split("\n") for i, line in enumerate(lines): if line.find(search_string) != -1: i += 1 while lines[i].find("Link States") == -1: include_lines.append(lines[i]) i += 1 if i == len(lines): break include_lines = '\n'.join(include_lines) raw_payload = include_lines # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output skip_head = 1 header_keys = ['link_id', 'adv_router', 'age', 'seq_num', 'checksum'] mod_raw_data = data_parser.insert_header_to_raw_data(raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) pylogger.debug("Get IP OSPF Database returned pydict: %s", pydict) return pydict
def get_ip_route(cls, client_object, route_filter=None, prefix=None, get_ip_route=None): """ NSXEdge> show ip route Codes: O - OSPF derived, i - IS-IS derived, B - BGP derived, C - connected, S - static, L1 - IS-IS level-1, L2 - IS-IS level-2, IA - OSPF inter area, E1 - OSPF external type 1, E2 - OSPF external type 2, # noqa N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 Total number of routes: 4 C 10.110.60.0/22 [0/0] via 10.110.63.114 C 169.0.0.0/28 [0/0] via 169.0.0.2 C 169.255.255.240/28 [0/0] via 169.255.255.241 C 192.168.3.0/24 [0/0] via 192.168.3.1 NSXEdge> """ PARSER = "raw/horizontalTable" VALID_ROUTE_FILTERS = ['bgp', 'connected', 'static'] get_ip_route_command = ["show ip route"] if route_filter is None: skip_head = 6 elif route_filter not in VALID_ROUTE_FILTERS: raise ValueError( "Invalid route filter: %r. Valid values are : %r" % (route_filter, VALID_ROUTE_FILTERS)) else: skip_head = 4 get_ip_route_command.append(route_filter) if prefix: get_ip_route_command.append(prefix) endpoint = " ".join(get_ip_route_command) # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) # Specify the Header keys that we want to insert to the output header_keys = ['Code', 'Network', 'AdminDist_Metric', 'Via', 'NextHop'] mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) # Close the expect connection object client_object.connection.close() get_ip_route_schema_object = get_ip_route_schema. \ GetIPRouteSchema(pydict) if route_filter and prefix: return get_ip_route_schema_object.table[0] return get_ip_route_schema_object
def get_ip_route(self, server_dict, edge_ha_index="0", get_ip_route=None): pylogger.info("Getting Edge IP Route using Centralized API") edge_ha_index = edge_ha_index['edge_ha_index'] url_endpoint = "/edges/" + self.id + "/appliances/" + edge_ha_index + "?action=execute" self.set_create_endpoint(url_endpoint) self.connection.api_header = '/api/4.0' self.schema_class = 'edge_centralized_api_cli_schema.EdgeCentralizedApiCliSchema' pylogger.debug("URl EndPoint : %s ", url_endpoint) py_dict = { 'cmdstr': 'show ip route' } schema_obj = EdgeCentralizedApiCliSchema(py_dict) result_obj = self.create(schema_obj) PARSER = "raw/horizontalTable" header_keys = ['Code', 'Network', 'AdminDist_Metric', 'Via', 'NextHop'] # No. of Header lines to be skipped from output skip_head = 6 raw_payload = result_obj[0].response_data pylogger.debug("Response Data from API: %s ", raw_payload) #--------------------------------------------------------------- # If the raw_payload contains OSPF data we have modify the header # and insert NUL element at the second place to parse the data properly # # # C 3.3.3.0/24 [0/0] via 3.3.3.1 # O E2 4.4.4.0/24 [110/0] via 10.10.10.2 ----> this addition requires below change # noqa # C 10.10.10.0/24 [0/0] via 10.10.10.1 # O 10.10.10.0/24 [0/0] via 10.10.10.1 # # After parsing the output will be, Inserting NULL into the second field # # C NULL 3.3.3.0/24 [0/0] via 3.3.3.1 # O E2 4.4.4.0/24 [110/0] via 10.10.10.2 # C NULL 10.10.10.0/24 [0/0] via 10.10.10.1 # O NULL 10.10.10.0/24 [0/0] via 10.10.10.1 # #--------------------------------------------------------------- if raw_payload.__contains__("O"): include_lines = [] header_keys = ['Code', 'OSPF_ExternalType' , 'Network', 'AdminDist_Metric', 'Via', 'NextHop'] lines = raw_payload.strip().split("\n") for line in lines[:skip_head]: include_lines.append(line) for line in lines[skip_head:]: if (line.strip() != ""): templine = line.split() pattern = '[A-Z]+' matched = re.match(pattern,templine[1]) if not matched: templine.insert(1,"NULL") templine = " " . join(templine) print templine include_lines.append(templine) else: include_lines.append(line) include_lines = '\n'. join(include_lines) raw_payload = include_lines # Get the parser data_parser = utilities.get_data_parser(PARSER) mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) return pydict
def get_ip(cls, client_object, table_name=None, get_ip=None): """ Sample Output of command show ip forwarding: Codes: C - connected, R - remote, > - selected route, * - FIB route R>* 0.0.0.0/0 via 10.24.31.253, vNic_3 C>* 10.24.28.0/22 is directly connected, vNic_3 C>* 20.20.20.0/24 is directly connected, vNic_2 C>* 50.50.50.0/24 is directly connected, vNic_0 #Sample Output of command show ip bgp: NSXEdge> show ip bgp Status codes: s - suppressed, d - damped, > - best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Origin > 100.64.1.0/31 169.0.0.1 0 100 32768 ? > 192.168.40.0/24 192.168.50.2 0 100 60 i > 192.168.50.0/24 192.168.50.2 0 100 60 i > 192.168.60.0/24 169.0.0.1 0 100 32768 ? > 192.168.70.0/24 169.0.0.1 0 100 32768 ? """ BGP_TABLE = 'bgp' FORWARDING_TABLE = 'forwarding' PARSER = "raw/horizontalTable" VALID_TABLES = [FORWARDING_TABLE, BGP_TABLE] get_ip_command = "show ip %s" header_keys = None skip_head = None header_skip_dict = { 'forwarding': { 'header_keys': ['Code', 'Network', 'Via', 'NextHop', 'VnicName'], # noqa 'skip_head': 2 }, 'bgp': { 'header_keys': [ 'Scode', 'Network', 'NextHop', 'Metric', 'LocPrf', 'Weight', 'Origin' ], # noqa 'skip_head': 3 } } if table_name not in VALID_TABLES: raise ValueError("Invalid table name: %r. Valid values are : %r" % (table_name, VALID_TABLES)) endpoint = get_ip_command % table_name header_keys = header_skip_dict[table_name]['header_keys'] # No. of Header lines to be skipped from output skip_head = header_skip_dict[table_name]['skip_head'] # Execute the command on the Edge VM raw_payload = client_object.connection. \ request(endpoint, EXPECT_PROMPT).response_data # Get the parser data_parser = utilities.get_data_parser(PARSER) if table_name == FORWARDING_TABLE: raw_payload = data_parser.marshal_raw_data( raw_payload, 'is directly connected,', 'isdirectlyconnected NULL') # Specify the Header keys that we want to insert to the output mod_raw_data = data_parser.insert_header_to_raw_data( raw_payload, header_keys=header_keys, skip_head=skip_head) # Get the parsed data pydict = data_parser.get_parsed_data(mod_raw_data, header_keys=header_keys, skip_head=skip_head, expect_empty_fields=False) # Close the expect connection object client_object.connection.close() if table_name == FORWARDING_TABLE: get_ip_schema_object = get_ip_forwarding_schema. \ GetIPForwardingSchema(pydict) elif table_name == BGP_TABLE: get_ip_schema_object = get_ip_bgp_schema.GetIPBGPSchema(pydict) return get_ip_schema_object