blob: 079915abb39dd651fb78f48ff380564da4df11c6 [file] [log] [blame]
Matteo Scandolo920e8fd2017-08-08 13:05:24 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
Matteo Scandolo485b7132017-06-30 11:46:47 -070017from resources import RESOURCES
18
19class GRPCModelsAccessor:
20 """
21 This class provide the glue between the models managed by TOSCA and the ones living in xos-core
22 """
23
24 @staticmethod
Matteo Scandolo21dde412017-07-11 18:54:12 -070025 def get_model_from_classname(class_name, data, username, password):
Matteo Scandolo485b7132017-06-30 11:46:47 -070026 """
27 Give a Model Class Name and some data, check if that exits or instantiate a new one
28 """
29
Matteo Scandolo485b7132017-06-30 11:46:47 -070030 if data.get('name'):
31 used_key = 'name'
32 else:
Matteo Scandolo78ca3eb2017-07-13 16:58:22 -070033 # FIXME apparently we're not matching model without a name field
Matteo Scandolo485b7132017-06-30 11:46:47 -070034 used_key = data.keys()[0]
35
Matteo Scandolo21dde412017-07-11 18:54:12 -070036 key = "%s~%s" % (username, password)
37 if not key in RESOURCES:
38 raise Exception("[XOS-TOSCA] User '%s' does not have ready resources" % username)
39 if class_name not in RESOURCES[key]:
Matteo Scandolod12be212017-07-07 10:44:34 -070040 raise Exception('[XOS-TOSCA] The model you are trying to create (%s: %s, class: %s) is not know by xos-core' % (used_key, data[used_key], class_name))
Matteo Scandolo485b7132017-06-30 11:46:47 -070041
Matteo Scandolo21dde412017-07-11 18:54:12 -070042 cls = RESOURCES[key][class_name]
Matteo Scandolo485b7132017-06-30 11:46:47 -070043 models = cls.objects.filter(**{used_key: data[used_key]})
44
45 if len(models) == 1:
46 print "[XOS-Tosca] Model %s already exist, retrieving instance..." % data[used_key]
47 model = models[0]
48 elif len(models) == 0:
Matteo Scandolod12be212017-07-07 10:44:34 -070049
50 if 'must-exist' in data and data['must-exist']:
51 raise Exception("[XOS-TOSCA] Model %s:%s has property 'must-exist' but cannot be found" % (class_name, data[used_key]))
52
Matteo Scandolo485b7132017-06-30 11:46:47 -070053 model = cls.objects.new()
54 print "[XOS-Tosca] Model %s is new, creating new instance..." % data[used_key]
55 else:
56 raise Exception("[XOS-Tosca] Model %s has multiple instances, I can't handle it" % data[used_key])
57 return model