Commit 304d0fb2 authored by Pedro Duarte's avatar Pedro Duarte
Browse files

add all required oc and ipi mappings

parent d4b226f5
Loading
Loading
Loading
Loading
+64 −7
Original line number Diff line number Diff line
import yaml
import os


with open('config/config.yml') as cfg:
# Get the directory where this module is located
module_dir = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(module_dir, 'config', 'config.yml')

with open(config_path) as cfg:
    config : dict = yaml.safe_load(cfg)

dict_name = config.get('name')
@@ -17,22 +22,31 @@ class DictHelper:
            return yaml.safe_load(cfg)

    def get_object(self, name, plural=False) -> str:
        return self._read().get(name).get('plural' if plural else 'singular')
        config_data = self._read()
        if name not in config_data.get('objects', {}):
            raise KeyError(f"Object '{name}' not found in configuration")
        return config_data['objects'][name].get('plural' if plural else 'singular')
        
    def get_namespaces(self, name) -> str:
        return self._read().get(name)
        return self._read().get('namespaces', {}).get(name)
        
    def get_path(self, name) -> str:
        path_details = self._read().get(name)
    def get_path(self, name, **kwargs) -> str:
        path_details = self._read().get('paths', {}).get(name)
        if not path_details:
            raise KeyError(f"Path '{name}' not found in configuration")

        path : str = path_details.get('path')
        namespace = path_details.get('namespace')

        # Format the path with provided parameters
        if kwargs:
            path = path.format(**kwargs)

        if namespace is None:
            return path

        path_segments = path.split('/')
        required_namespaces = len([s for s in path_segments if len(s > 1)])
        required_namespaces = len([s for s in path_segments if len(s) > 1])

        if type(namespace) == list and len(namespace) != required_namespaces:
            raise Exception(f'Number of namespaces do not match the specified path : {path}')
@@ -49,7 +63,50 @@ class DictHelper:
            else:
                processed_segments.append(s)
        
        return '/'.join(processed_segments)
    
    def get_element(self, name) -> Tuple[str, str]:
        """
        Get element namespace and path for XML element lookups.
        
        Args:
            name: The name of the element to look up
            
        Returns:
            Tuple of (namespace, path) for the element
        """
        element_details = self._read().get('elements', {}).get(name)
        if not element_details:
            raise KeyError(f"Element '{name}' not found in configuration")
        
        namespace = element_details.get('namespace')
        path = element_details.get('path')
        
        return namespace, path
    
    def get_resource_key(self, name, **kwargs) -> str:
        """
        Get device-specific resource key path.
        
        Args:
            name: The resource key name to look up
            **kwargs: Parameters to format into the resource key path
            
        Returns:
            Formatted resource key path
        """
        resource_key_details = self._read().get('resource_keys', {}).get(name)
        if not resource_key_details:
            raise KeyError(f"Resource key '{name}' not found in configuration")
        
        path = resource_key_details.get('path')
        if kwargs:
            path = path.format(**kwargs)
        
        return path


def get_dict_helper(dict_type = None) -> DictHelper:
    if dict_type is None: dict_type = dict_default
    return DictHelper(f'config/{dict_name}.{dict_type}.yml')
 No newline at end of file
    config_file = os.path.join(module_dir, 'config', f'{dict_name}.{dict_type}.yml')
    return DictHelper(config_file)
 No newline at end of file
+450 −1
Original line number Diff line number Diff line
@@ -6,8 +6,457 @@ objects:
  components:
    singular: interface
    plural: interfaces
  interfaces:
    singular: interface
    plural: interfaces

paths:
  component_type:
    namespace: ipiie
    path: extended/state/hardware-type
  ports:
    namespace: ipii
    path: interfaces/interface
  interface_counters:
    namespace: ipii
    path: interfaces/interface[name='{interface_name}']/state/counters/{counter_name}
  interfaces:
    namespace: ipii
    path: interfaces/interface
  subinterfaces:
    namespace: ipii
    path: subinterfaces/subinterface
  ipv4_addresses:
    namespace: ipiiip
    path: ipv4/addresses/address
  ipv6_addresses:
    namespace: ipiiip
    path: ipv6/addresses/address
  acl_set:
    namespace: ipiacl
    path: acl/acl-sets/acl-set
  acl_entry:
    namespace: ipiacl
    path: acl-entries/acl-entry
  acl_ipv4:
    namespace: ipiacl
    path: ipv4/config
  acl_transport:
    namespace: ipiacl
    path: transport/config
  acl_actions:
    namespace: ipiacl
    path: actions/config
  acl_interface:
    namespace: ipiacl
    path: acl/interfaces/interface
  acl_ingress:
    namespace: ipiacl
    path: ingress-acl-sets/ingress-acl-set
  acl_egress:
    namespace: ipiacl
    path: egress-acl-sets/egress-acl-set
  network_instances:
    namespace: ipini
    path: network-instances/network-instance
  ni_protocols:
    namespace: ipini
    path: protocols/protocol
  ni_table_connections:
    namespace: ipini
    path: table-connections/table-connection
  ni_interface:
    namespace: ipini
    path: interfaces/interface
  ni_apply_policy:
    namespace: ipini
    path: inter-instance-policies/apply-policy
  ni_import_policy:
    namespace: ipini
    path: config/import-policy
  ni_export_policy:
    namespace: ipini
    path: config/export-policy
  ni_connection_points:
    namespace: ipini
    path: connection-points/connection-point
  ni_endpoints:
    namespace: ipini
    path: endpoints/endpoint/remote/config
  routing_policy_definitions:
    namespace: ipirp
    path: routing-policy/policy-definitions/policy-definition
  pd_statements:
    namespace: ipirp
    path: statements/statement
  pd_conditions:
    namespace: ipirp
    path: conditions/ipibp:bgp-conditions/ipibp:match-ext-community-set
  pd_actions:
    namespace: ipirp
    path: actions
  bgp_ext_community_set:
    namespace: ipirp
    path: routing-policy/defined-sets/ipibp:bgp-defined-sets/ipibp:ext-community-sets/ipibp:ext-community-set

elements:
  interface_name:
    namespace: ipii
    path: name
  interface_type:
    namespace: ipii
    path: config/type
  interface_state_type:
    namespace: ipii
    path: state/type
  interface_mtu:
    namespace: ipii
    path: config/mtu
  interface_description:
    namespace: ipii
    path: config/description
  interface_counters_in_pkts:
    namespace: ipii
    path: state/counters/in-pkts
  interface_counters_in_octets:
    namespace: ipii
    path: state/counters/in-octets
  interface_counters_in_errors:
    namespace: ipii
    path: state/counters/in-errors
  interface_counters_out_octets:
    namespace: ipii
    path: state/counters/out-octets
  interface_counters_out_pkts:
    namespace: ipii
    path: state/counters/out-pkts
  interface_counters_out_errors:
    namespace: ipii
    path: state/counters/out-errors
  interface_counters_out_discards:
    namespace: ipii
    path: state/counters/out-discards
  subinterface_index:
    namespace: ipii
    path: index
  subinterface_vlan:
    namespace: ipiv
    path: vlan/match/single-tagged/config/vlan-id
  ipv4_address:
    namespace: ipiiip
    path: state/ip
  ipv4_prefix:
    namespace: ipiiip
    path: state/prefix-length
  ipv6_address:
    namespace: ipiiip
    path: state/ip
  ipv6_prefix:
    namespace: ipiiip
    path: state/prefix-length
  component_name:
    namespace: ipii
    path: name
  component_type:
    namespace: ipii
    path: state/type
  component_description:
    namespace: ipii
    path: state/description
  component_location:
    namespace: ipii
    path: state/location
  component_id:
    namespace: ipii
    path: state/id
  component_empty:
    namespace: ipii
    path: state/empty
  component_parent:
    namespace: ipii
    path: state/parent
  component_hardware_version:
    namespace: ipii
    path: state/hardware-version
  component_firmware_version:
    namespace: ipii
    path: state/firmware-version
  component_software_version:
    namespace: ipii
    path: state/software-version
  component_serial:
    namespace: ipii
    path: state/serial-no
  component_mfg_name:
    namespace: ipii
    path: state/mfg-name
  component_model_name:
    namespace: ipii
    path: state/model-name
  component_part_no:
    namespace: ipii
    path: state/part-no
  component_removable:
    namespace: ipii
    path: state/removable
  component_replaceable:
    namespace: ipii
    path: state/replaceable
  component_oper_status:
    namespace: ipii
    path: state/oper-status
  acl_name:
    namespace: ipiacl
    path: name
  acl_type:
    namespace: ipiacl
    path: type
  acl_sequence_id:
    namespace: ipiacl
    path: sequence-id
  acl_source_address:
    namespace: ipiacl
    path: source-address
  acl_destination_address:
    namespace: ipiacl
    path: destination-address
  acl_protocol:
    namespace: ipiacl
    path: protocol
  acl_dscp:
    namespace: ipiacl
    path: dscp
  acl_hop_limit:
    namespace: ipiacl
    path: hop-limit
  acl_source_port:
    namespace: ipiacl
    path: source-port
  acl_destination_port:
    namespace: ipiacl
    path: destination-port
  acl_tcp_flags:
    namespace: ipiacl
    path: tcp-flags
  acl_forwarding_action:
    namespace: ipiacl
    path: forwarding-action
  acl_log_action:
    namespace: ipiacl
    path: log-action
  acl_interface_id:
    namespace: ipiacl
    path: id
  acl_set_name_ingress:
    namespace: ipiacl
    path: set-name-ingress
  acl_type_ingress:
    namespace: ipiacl
    path: type-ingress
  acl_set_name_egress:
    namespace: ipiacl
    path: set-name-egress
  acl_type_egress:
    namespace: ipiacl
    path: type-egress
  ni_name:
    namespace: ipini
    path: name
  ni_type:
    namespace: ipini
    path: config/type
  ni_router_id:
    namespace: ipini
    path: config/router-id
  ni_route_distinguisher:
    namespace: ipini
    path: config/route-distinguisher
  ni_connection_point_id:
    namespace: ipini
    path: connection-point-id
  ni_remote_system:
    namespace: ipini
    path: remote-system
  ni_virtual_circuit_identifier:
    namespace: ipini
    path: virtual-circuit-identifier
  ni_protocol_identifier:
    namespace: ipini
    path: identifier
  ni_protocol_name:
    namespace: ipini
    path: name
  ni_bgp_as:
    namespace: ipini
    path: bgp/global/config/as
  ni_bgp_router_id:
    namespace: ipini
    path: bgp/global/config/router-id
  ni_src_protocol:
    namespace: ipini
    path: src-protocol
  ni_dst_protocol:
    namespace: ipini
    path: dst-protocol
  ni_address_family:
    namespace: ipini
    path: address-family
  ni_default_import_policy:
    namespace: ipini
    path: config/default-import-policy
  ni_interface_name:
    namespace: ipini
    path: config/interface
  ni_subinterface_name:
    namespace: ipini
    path: config/subinterface
  rp_policy_name:
    namespace: ipirp
    path: name
  rp_statement_name:
    namespace: ipirp
    path: name
  rp_ext_community_set:
    namespace: ipibp
    path: config/ext-community-set
  rp_match_set_options:
    namespace: ipibp
    path: config/match-set-options
  rp_policy_result:
    namespace: ipibp
    path: config/policy-result
  rp_ext_community_set_name:
    namespace: ipibp
    path: ext-community-set-name
  rp_ext_community_member:
    namespace: ipibp
    path: config/ext-community-member
  inv_component_name:
    namespace: ipii
    path: name
  inv_component_description:
    namespace: ipii
    path: state/description
  inv_component_location:
    namespace: ipii
    path: state/location
  inv_component_id:
    namespace: ipii
    path: state/id
  inv_component_type:
    namespace: ipii
    path: state/type
  inv_component_empty:
    namespace: ipii
    path: state/empty
  inv_component_parent:
    namespace: ipii
    path: state/parent
  inv_component_hardware_version:
    namespace: ipii
    path: state/hardware-version
  inv_component_firmware_version:
    namespace: ipii
    path: state/firmware-version
  inv_component_software_version:
    namespace: ipii
    path: state/software-version
  inv_component_serial:
    namespace: ipii
    path: state/serial-no
  inv_component_mfg_name:
    namespace: ipii
    path: state/mfg-name
  inv_component_removable:
    namespace: ipii
    path: state/removable
  inv_component_mfg_date:
    namespace: ipii
    path: state/mfg-date
  inv_transceiver_serial:
    namespace: ipitr
    path: transceiver/state/serial-no
  inv_transceiver_present:
    namespace: ipitr
    path: transceiver/state/present
  inv_transceiver_vendor:
    namespace: ipitr
    path: transceiver/state/vendor
  inv_transceiver_connector:
    namespace: ipitr
    path: transceiver/state/connector-type
  inv_transceiver_form:
    namespace: ipitr
    path: transceiver/state/form-factor
  ep_component_type:
    namespace: ipii
    path: state/type
  ep_component_name:
    namespace: ipii
    path: name
  ep_port_channel_speed:
    namespace: ipipp
    path: port/breakout-mode/state/channel-speed

resource_keys:
  network_instance:
    path: /network_instance[{name}]
  network_instance_protocols:
    path: /network_instance[{name}]/protocols[{identifier}]
  network_instance_table_connections:
    path: /network_instance[{name}]/table_connections[{src_protocol}][{dst_protocol}][{address_family}]
  network_instance_interface:
    path: /network_instance[{name}]/interface[{interface_name}]
  network_instance_inter_instance_policies:
    path: /network_instance[{name}]/inter_instance_policies[{policy_name}]
  acl_set_entry:
    path: /acl/acl-set[{name}][{type}]/acl-entry[{sequence_id}]
  acl_interfaces_ingress:
    path: /acl/interfaces/ingress[{name}][{type}]
  acl_interfaces_egress:
    path: /acl/interfaces/egress[{name}][{type}]
  interface_subinterface:
    path: /interface[{name}]/subinterface[{index}]
  routing_policy_definition:
    path: /routing_policy/policy_definition[{name}]
  routing_policy_statement:
    path: /routing_policy/policy_definition[{name}]/statement[{statement_name}]
  routing_policy_bgp_defined_set:
    path: /routing_policy/bgp_defined_set[{name}]
  routing_policy_bgp_defined_set_member:
    path: /routing_policy/bgp_defined_set[{name}][{member}]
  inventory_component:
    path: /inventory[{name}]
  endpoints_endpoint:
    path: /endpoints/endpoint[{uuid}]
  interface:
    path: /interface[{name}]

paths:
  interface_counters:
    path: /ipinfusion-interfaces:interfaces/interface[name={name}]/state/counters/{counter}
    namespace: ipii
  network_instance_interfaces:
    path: /ipinfusion-network-instance:network-instances/network-instance[name={name}]/interfaces
    namespace: ipini
  network_instance_protocols:
    path: /ipinfusion-network-instance:network-instances/network-instance[name={name}]/protocols/protocol[identifier={identifier}][name={protocol_name}]
    namespace: ipini
  network_instance_static_routes:
    path: /ipinfusion-network-instance:network-instances/network-instance[name={name}]/protocols/protocol[identifier={identifier}][name={protocol_name}]/static-routes/static[prefix={prefix}]
    namespace: ipini
  interface_counters_path:
    path: /ipinfusion-interfaces:interfaces/interface/state/counters
    namespace: ipii
  network_instance_interface:
    path: /ipinfusion-network-instances/network-instance[name={name}]/interfaces/interface[id={interface_id}]
    namespace: ipini
  network_instance_protocol:
    path: /ipinfusion-network-instances/network-instance[name={name}]/protocols/protocol[identifier={identifier}][name={protocol_name}]
    namespace: ipini
  network_instance_static_route:
    path: /ipinfusion-network-instances/network-instance[name={name}]/protocols/protocol[identifier={identifier}][name={protocol_name}]/static-routes/static[prefix={prefix}]
    namespace: ipini
  interface_subinterface:
    path: /ipinfusion-interfaces/interface[name={name}]/subinterfaces/subinterface[index={index}]
    namespace: ipii
 No newline at end of file
+450 −1

File changed.

Preview size limit exceeded, changes collapsed.