diff --git a/test.py b/test.py index 770ca513b3adab10637e1514e69cf2c72013b113..8449b494ffa7b2d61e6638562063db157d397b61 100644 --- a/test.py +++ b/test.py @@ -7,107 +7,158 @@ from uuid import UUID, uuid4, uuid5 import logging -def extract_openroadm_info(xml_data:str): - roadm_info={"node-id":None,"node-number":None,"node-type":None,'clli':None} - xml_bytes = xml_data.encode("utf-8") - root = ET.fromstring(xml_bytes) - namespace = {'oc': "http://org/openroadm/device"} - info = root.findall('.//oc:info',namespace) - if info is not None : - for i in info : - node_id= i.find('.//oc:node-id',namespace) - node_number= i.find('.//oc:node-number',namespace) - node_type=i.find('.//oc:node-type',namespace) - clli=i.find('.//oc:clli',namespace) - if (node_id is not None): - roadm_info['node-id']=node_id.text - if (node_number is not None): - roadm_info['node-number']=node_number.text - if (node_type is not None): - roadm_info['node-type']=node_type.text - if (clli is not None): - roadm_info['clli']=clli.text - return roadm_info - - - +create_media=''' +<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> + <wavelength-router xmlns="http://openconfig.net/yang/wavelength-router"> + <media-channels> + <channel> + <index>1</index> + <config> + <index>1</index> + <name>C_BAND</name> + <lower-frequency>192006250</lower-frequency> + <upper-frequency>192056250</upper-frequency> + <optical-band-parent xmlns="http://flex-scale-project.eu/yang/flex-scale-mg-on">1</optical-band-parent> + </config> + <source> + <config> + <port-name>111</port-name> + </config> + </source> + <dest> + <config> + <port-name>2</port-name> + </config> + </dest> + </channel> + </media-channels> + </wavelength-router> +</config> +''' -def extract_roadm_circuits_pack (xml_data:str): - - - xml_bytes = xml_data.encode("utf-8") - root = ET.fromstring(xml_bytes) - # with open('xml.log', 'w') as f: - # print(xml_bytes, file=f) - +delete_optical_band= ''' +<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> + <wavelength-router xmlns="http://openconfig.net/yang/wavelength-router"> + <optical-bands xmlns="http://flex-scale-project.eu/yang/flex-scale-mg-on"> + <optical-band operation="delete"> + <index>1</index> + <config> + <index>1</index> + </config> + </optical-band> + </optical-bands> + </wavelength-router> +</config> +''' - namespace = {'oc': "http://org/openroadm/device"} - - circuits = root.findall('.//oc:circuit-packs',namespace) +def extract_channel_xmlns (data_xml:str,is_opticalband:bool): + xml_bytes = data_xml.encode("utf-8") + root = ET.fromstring(xml_bytes) + + namespace=None + channels=None - circuits_list =[] - # print(f"component {components}") - - if (circuits is not None): - circuit_info ={} - for circuit in circuits: + if (not is_opticalband) : + + optical_channel_namespaces = { + 'ns': 'urn:ietf:params:xml:ns:netconf:base:1.0', + 'oc': 'http://openconfig.net/yang/platform', + } + + channels= root.find('.//{*}optical-channel',optical_channel_namespaces) + if channels is not None : + optical_channel_namespace = channels.tag.replace("optical-channel", "") + namespace=optical_channel_namespace.replace("{", "").replace("}", "") + else : + optical_band_namespaces= { + 'oc':'http://openconfig.net/yang/wavelength-router' + } + + channels= root.find('.//{*}optical-bands',optical_band_namespaces) + if channels is not None: + optical_channel_namespace = channels.tag.replace("optical-bands", "") + namespace=optical_channel_namespace.replace("{", "").replace("}", "") - circuit_name = circuit.find(".//oc:circuit-pack-name",namespace) - circuit_type=circuit.find(".//oc:circuit-pack-type",namespace) - circuit_adminstrative_status=circuit.find(".//oc:administrative-state",namespace) - circuit_equipment_state=circuit.find("./oc:equipment-state",namespace) - circuit_mode=circuit.find("./oc:circuit-pack-mode",namespace) - slot= circuit.find("./oc:slot",namespace) - shelf= circuit.find("./oc:shelf",namespace) - ports = circuit.findall("./oc:ports",namespace) - - circuit_ports=[] - if (ports is not None): - - for port in ports : - port_info={} - port_name=port.find('./oc:port-name',namespace) - port_qual= port.find("./oc:port-qual",namespace) - - if port_name is not None : - port_info["port_name"]=port_name.text - if port_qual is not None : - port_info["port_qual"]=port_qual.text - circuit_ports.append(port_info) - if (circuit_name is not None): - circuit_info["circuit_name"]=circuit_name.text - if (circuit_type is not None): - circuit_info["circuit_type"]=circuit_type.text - if (circuit_adminstrative_status is not None): - circuit_info["circuit_adminstrative_status"]=circuit_adminstrative_status.text - if (circuit_equipment_state is not None): - circuit_info["circuit_equipment_state"]=circuit_equipment_state.text - if (circuit_mode is not None): - circuit_info["circuit_mode"]=circuit_mode.text - if (slot is not None): - circuit_info["slot"]=slot.text - if (shelf is not None): - circuit_info["shelf"]=shelf.text - circuit_info["ports"]=circuit_ports - - circuits_list.append(circuit_info) + + return namespace + +def extract_optical_bands (data_xml:str,namespace:str): + namespaces={"oc":"http://flex-scale-project.eu/yang/flex-scale-mg-on"} + xml_bytes = data_xml.encode("utf-8") + root = ET.fromstring(xml_bytes) + optical_bands= root.find('.//oc:optical-bands',namespaces) + op_bands=[] + if optical_bands is not None : + optical_bands_ele= optical_bands.findall('.//oc:optical-band',namespaces) + + + for optical_band in optical_bands_ele: + band_ele=optical_band.find('.//oc:name',namespaces) + lower_freq_ele=optical_band.find('.//oc:lower-frequency',namespaces) + upper_freq_ele=optical_band.find('.//oc:upper-frequency',namespaces) + admin_status_ele=optical_band.find('.//oc:admin-status',namespaces) + source_ele=optical_band.find('.//oc:source/oc:config/oc:port-name',namespaces) + dest_ele=optical_band.find('.//oc:dest/oc:config/oc:port-name',namespaces) + channel_index= optical_band.find('.//oc:index',namespaces) + op_band_obj={ + 'band_name':band_ele.text if band_ele is not None else None, + 'lower_frequency':lower_freq_ele.text if lower_freq_ele is not None else None, + 'upper_frequency':upper_freq_ele.text if upper_freq_ele is not None else None, + 'admin_status':admin_status_ele.text if admin_status_ele is not None else None, + 'src_port':source_ele.text if source_ele is not None else None, + 'dest_port':dest_ele.text if dest_ele is not None else None, + "channel_index":channel_index.text if channel_index is not None else None + } + op_bands.append(op_band_obj) - return circuits_list - - - - - - + return op_bands + +def extract_media_channels (data_xml:str,namespace:str): + optical_band_namespaces="http://flex-scale-project.eu/yang/flex-scale-mg-on" + namespaces={"oc":"http://openconfig.net/yang/wavelength-router",'ob_parent':optical_band_namespaces} + xml_bytes = data_xml.encode("utf-8") + root = ET.fromstring(xml_bytes) + media_channels= root.find(f'.//oc:media-channels',namespaces) + op_bands=[] + if media_channels is not None : + + media_channels_ele= media_channels.findall('.//oc:channel',namespaces) + + + for optical_band in media_channels_ele: + + band_ele=optical_band.find('.//oc:name',namespaces) + lower_freq_ele=optical_band.find('.//oc:lower-frequency',namespaces) + upper_freq_ele=optical_band.find('.//oc:upper-frequency',namespaces) + admin_status_ele=optical_band.find('.//oc:admin-status',namespaces) + source_ele=optical_band.find('.//oc:source/oc:config/oc:port-name',namespaces) + dest_ele=optical_band.find('.//oc:dest/oc:config/oc:port-name',namespaces) + ob_parent=optical_band.find('.//ob_parent:optical-band-parent',namespaces) + channel_index= optical_band.find('.//oc:index',namespaces) + op_band_obj={ + 'band_name':band_ele.text if band_ele is not None else None, + 'lower_frequency':lower_freq_ele.text if lower_freq_ele is not None else None, + 'upper_frequency':upper_freq_ele.text if upper_freq_ele is not None else None, + 'admin_status':admin_status_ele.text if admin_status_ele is not None else None, + 'src_port':source_ele.text if source_ele is not None else None, + 'dest_port':dest_ele.text if dest_ele is not None else None, + 'optical_band_parent':ob_parent.text if ob_parent is not None else None, + 'channel_index':channel_index.text if channel_index is not None else None + } + op_bands.append(op_band_obj) + + return op_bands + + device = { - 'host': '172.17.0.2', # IP address or hostname of the remote machine - 'port': 830, # SSH port (default: 22) - 'username': 'openroadm', # SSH username - 'password': 'openroadm', # SSH password + 'host': '10.0.2.4', # IP address or hostname of the remote machine + 'port': 2026, # SSH port (default: 22) + 'username': 'admin', # SSH username + 'password': 'admin', # SSH password 'device_params': {'name': 'default'}, 'hostkey_verify':False, "allow_agent":False @@ -125,11 +176,22 @@ if __name__ == '__main__': ,hostkey_verify=device['hostkey_verify'] ,allow_agent=device['allow_agent'] ,look_for_keys=device['look_for_keys']) as m : - + #edit_result = m.edit_config (target="running",config=delete_optical_band) result = m.get_config (source="running").data_xml - road_info= extract_openroadm_info(result) - circuits=extract_roadm_circuits_pack(result) - print(f"roadm_info {road_info}") + optical_band_namespaces="http://flex-scale-project.eu/yang/flex-scale-mg-on" + namespaces={"oc":"http://openconfig.net/yang/wavelength-router"} + obj=extract_media_channels(result,namespaces) + obj1=extract_optical_bands(result,namespaces) + # road_info= extract_openroadm_info(result) + # circuits=extract_roadm_circuits_pack(result) + #print (f'edit result {edit_result}') + print(f"result {result}") + print(f"media_cahnnels {obj}") + print(f"optical_bands {obj1}") + #print(f"circuits {circuits}") # with open("context.log","w") as f: # print (result,file=f) + + +