[CORD-1525] Populating relational fields and saving models
Change-Id: Ied02e7e48efed353ae4be8ebb277aef3b6af4cab
diff --git a/src/tosca/parser.py b/src/tosca/parser.py
index af70d27..22e26a0 100644
--- a/src/tosca/parser.py
+++ b/src/tosca/parser.py
@@ -115,6 +115,13 @@
ordered_models_templates.append(templates_by_model_name[name])
return ordered_models_templates
+ @staticmethod
+ def populate_dependencies(model, requirements, saved_models):
+ for dep in requirements:
+ class_name = dep.keys()[0]
+ related_model = saved_models[dep[class_name]['node']]
+ setattr(model, "%s_id" % class_name, related_model.id)
+ return model
def __init__(self, recipe):
@@ -124,6 +131,8 @@
self.templates_by_model_name = None
# list of models ordered by requirements
self.ordered_models_name = None
+ # dictionary containing the saved model
+ self.saved_model_by_name = {}
self.ordered_models_template = []
self.recipe_file = TOSCA_RECIPES_DIR + '/tmp.yaml'
@@ -150,13 +159,16 @@
if class_name not in RESOURCES:
raise Exception("Nodetemplate %s's type %s is not a known resource" % (recipe.name, class_name))
model = GRPCModelsAccessor.get_model_from_classname(class_name, data)
- # [] populate model with data
+ # [] populate model with data[[
model = self.populate_model(model, data)
# [] check if the model has requirements
# [] if it has populate them
+ model = self.populate_dependencies(model, recipe.requirements, self.saved_model_by_name)
# [] save or update
model.save()
+ self.saved_model_by_name[recipe.name] = model
+
except Exception as e:
print e
if e.message:
diff --git a/src/tosca/tmp.yaml b/src/tosca/tmp.yaml
deleted file mode 100644
index e5b9fbd..0000000
--- a/src/tosca/tmp.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-description: Persist xos-sample-gui-extension
-
-imports:
- - custom_types/user.yaml
- - custom_types/site.yaml
- - custom_types/xosguiextension.yaml
-
-topology_template:
- node_templates:
-
- # UI Extension
- test:
- type: tosca.nodes.XOSGuiExtension
- properties:
- name: test
- files: /spa/extensions/test/vendor.js, /spa/extensions/test/app.js
-
- # Site
- onlab:
- type: tosca.nodes.Site
- properties:
- name: Open Networking Lab
- site_url: http://onlab.us/
- hosts_nodes: True
-
- # User
- test@opencord.org:
- type: tosca.nodes.User
- properties:
- password: mypwd
- firstname: User
- lastname: Test
- is_admin: True
- requirements:
- - site:
- node: onlab
- relationship: tosca.relationships.BelongsToOne
\ No newline at end of file