Commit 2fedcee6 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

WebUI

- added support for json-formatted custom config rules
parent 2ad35901
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -12,8 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import copy
from typing import Dict, List, Optional, Tuple
import copy, json
from typing import Dict, List, Optional, Tuple, Union

def get_descriptors_add_contexts(contexts : List[Dict]) -> List[Dict]:
    contexts_add = copy.deepcopy(contexts)
@@ -49,6 +49,16 @@ def get_descriptors_add_slices(slices : List[Dict]) -> List[Dict]:
        slices_add.append(slice_copy)
    return slices_add

TypeResourceValue = Union[str, int, bool, float, dict, list]
def format_custom_config_rules(config_rules : List[Dict]) -> List[Dict]:
    for config_rule in config_rules:
        if 'custom' not in config_rule: continue
        custom_resource_value : TypeResourceValue = config_rule['custom']['resource_value']
        if isinstance(custom_resource_value, (dict, list)):
            custom_resource_value = json.dumps(custom_resource_value, sort_keys=True, indent=0)
            config_rule['custom']['resource_value'] = custom_resource_value
    return config_rules

def split_devices_by_rules(devices : List[Dict]) -> Tuple[List[Dict], List[Dict]]:
    devices_add = []
    devices_config = []
+18 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ from device.client.DeviceClient import DeviceClient
from service.client.ServiceClient import ServiceClient
from slice.client.SliceClient import SliceClient
from webui.service.main.DescriptorTools import (
    get_descriptors_add_contexts, get_descriptors_add_services, get_descriptors_add_slices,
    format_custom_config_rules, get_descriptors_add_contexts, get_descriptors_add_services, get_descriptors_add_slices,
    get_descriptors_add_topologies, split_devices_by_rules)
from webui.service.main.forms import ContextForm, DescriptorForm

@@ -84,6 +84,23 @@ def process_descriptors(descriptors):
    slices      = descriptors.get('slices'     , [])
    connections = descriptors.get('connections', [])

    # Format CustomConfigRules in Devices, Services and Slices provided in JSON format
    for device in devices:
        config_rules = device.get('device_config', {}).get('config_rules', [])
        config_rules = format_custom_config_rules(config_rules)
        device['device_config']['config_rules'] = config_rules

    for service in services:
        config_rules = service.get('service_config', {}).get('config_rules', [])
        config_rules = format_custom_config_rules(config_rules)
        service['service_config']['config_rules'] = config_rules

    for slice in slices:
        config_rules = slice.get('slice_config', {}).get('config_rules', [])
        config_rules = format_custom_config_rules(config_rules)
        slice['slice_config']['config_rules'] = config_rules


    # Context and Topology require to create the entity first, and add devices, links, services, slices, etc. in a
    # second stage.
    contexts_add = get_descriptors_add_contexts(contexts)