summaryrefslogtreecommitdiffstats
path: root/conductor/conductor/controller/translator_utils.py
blob: 0f6f4a0f3da2be3b8f7a833fe1f19b49a9eeb437 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#
# -------------------------------------------------------------------------
#   Copyright (C) 2020 Wipro Limited.
#
#   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.
#
# -------------------------------------------------------------------------
#

VERSIONS = {'BASE': ["2016-11-01", "2017-10-10", "2018-02-01"],
            'GENERIC': ["2020-08-13"]}
LOCATION_KEYS = ['latitude', 'longitude', 'host_name', 'clli_code']
INVENTORY_PROVIDERS = ['aai', 'generator', 'sdc']
INVENTORY_TYPES = ['cloud', 'service', 'transport', 'vfmodule', 'nssi', 'nsi', 'slice_profiles', 'nst', 'nsst']
DEFAULT_INVENTORY_PROVIDER = INVENTORY_PROVIDERS[0]
CANDIDATE_KEYS = ['candidate_id', 'cost', 'inventory_type', 'location_id',
                  'location_type']
DEMAND_KEYS = ['filtering_attributes', 'passthrough_attributes', 'default_attributes', 'candidates', 'complex',
               'conflict_identifier', 'customer_id', 'default_cost', 'excluded_candidates',
               'existing_placement', 'flavor', 'inventory_provider',
               'inventory_type', 'port_key', 'region', 'required_candidates',
               'service_id', 'service_resource_id', 'service_subscription',
               'service_type', 'subdivision', 'unique', 'vlan_key']
CONSTRAINT_KEYS = ['type', 'demands', 'properties']
CONSTRAINTS = {
    # constraint_type: {
    #   split: split into individual constraints, one per demand
    #   required: list of required property names,
    #   optional: list of optional property names,
    #   thresholds: dict of property/base-unit pairs for threshold parsing
    #   allowed: dict of keys and allowed values (if controlled vocab);
    #            only use this for Conductor-controlled values!
    # }
    'attribute': {
        'split': True,
        'required': ['evaluate'],
    },
    'threshold': {
        'split': True,
        'required': ['evaluate'],
    },
    'distance_between_demands': {
        'required': ['distance'],
        'thresholds': {
            'distance': 'distance'
        },
    },
    'distance_to_location': {
        'split': True,
        'required': ['distance', 'location'],
        'thresholds': {
            'distance': 'distance'
        },
    },
    'instance_fit': {
        'split': True,
        'required': ['controller'],
        'optional': ['request'],
    },
    'inventory_group': {},
    'region_fit': {
        'split': True,
        'required': ['controller'],
        'optional': ['request'],
    },
    'zone': {
        'required': ['qualifier', 'category'],
        'optional': ['location'],
        'allowed': {'qualifier': ['same', 'different'],
                    'category': ['disaster', 'region', 'complex', 'country',
                                 'time', 'maintenance']},
    },
    'vim_fit': {
        'split': True,
        'required': ['controller'],
        'optional': ['request'],
    },
    'hpa': {
        'split': True,
        'required': ['evaluate'],
    },
}
HPA_FEATURES = ['architecture', 'hpa-feature', 'hpa-feature-attributes',
                'hpa-version', 'mandatory', 'directives']
HPA_OPTIONAL = ['score']
HPA_ATTRIBUTES = ['hpa-attribute-key', 'hpa-attribute-value', 'operator']
HPA_ATTRIBUTES_OPTIONAL = ['unit']
OPTIMIZATION_FUNCTIONS = {'distance_between': ['demand', 'location'],
                          'latency_between': ['demand', 'location'],
                          'attribute': ['demand', 'attribute']}


class TranslatorException(Exception):
    pass