Newer
Older
# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import lxml.etree as ET
from .VPN.Network_instance_multivendor import create_NI, associate_virtual_circuit, associate_RP_to_NI, add_protocol_NI, create_table_conns, associate_If_to_NI
from .VPN.Interfaces_multivendor import create_If_SubIf
from .VPN.Routing_policy import create_rp_def, create_rp_statement
def add_value_from_tag(target : Dict, field_name: str, field_value : ET.Element, cast=None) -> None:
if field_value is None or field_value.text is None: return
field_value = field_value.text
if cast is not None: field_value = cast(field_value)
target[field_name] = field_value
def add_value_from_collection(target : Dict, field_name: str, field_value : Collection) -> None:
if field_value is None or len(field_value) == 0: return
target[field_name] = field_value
"""
# Method Name: generate_templates
# Parameters:
- resource_key: [str] Variable to identify the rule to be executed.
- resource_value: [str] Variable with the configuration parameters of the rule to be executed.
- delete: [bool] Variable to identify whether to create or delete the rule.
- vendor: [str] Variable to identify the vendor of the equipment to be configured.
# Functionality:
This method generates the template to configure the equipment using pyangbind.
To generate the template the following steps are performed:
1) Get the first parameter of the variable "resource_key" to identify the main path of the rule.
2) Search for the specific configuration path
3) Call the method with the configuration parameters (resource_data variable).
# Return:
[dict] Set of templates generated according to the configuration rule
"""
def generate_templates(resource_key: str, resource_value: str, delete: bool,vendor:str) -> str: # template management to be configured
result_templates = []
list_resource_key = resource_key.split("/") # the rule resource key management
if "network_instance" in list_resource_key[1]: # network instance rules management
data: Dict[str, Any] = json.loads(resource_value)
if "connection_point" in resource_key:
result_templates.append(associate_virtual_circuit(data))
elif "inter_instance_policies" in resource_key:
result_templates.append(associate_RP_to_NI(data))
elif "protocols" in resource_key:
if vendor is None or vendor == "ADVA":
result_templates.append(add_protocol_NI(data, vendor, delete))
result_templates.append(create_table_conns(data, delete))
result_templates.append(associate_If_to_NI(data,delete))
result_templates.append(create_NI(data,vendor,delete))
if "interface" in list_resource_key[1]: # interface rules management
data: Dict[str, Any] = json.loads(resource_value)
result_templates.append(create_If_SubIf(data, vendor, delete))
elif "routing_policy" in list_resource_key[1]: # routing policy rules management
data: Dict[str, Any] = json.loads(resource_value)
result_templates.append(create_rp_def(data, delete))
result_templates.append(create_rp_statement(data, delete))
if "acl_ruleset" in resource_key: # acl rules management
result_templates.extend(acl_mgmt(resource_value,vendor, delete))