Add transaction subsystem definition in the use case of 27/17327/2
authorshangxdy <shang.xiaodong@zte.com.cn>
Thu, 21 Jul 2016 11:50:29 +0000 (19:50 +0800)
committershangxdy <shang.xiaodong@zte.com.cn>
Fri, 29 Jul 2016 12:50:09 +0000 (20:50 +0800)
substitution_mappings

As a developer;
I want to implement the function of substitution_mapping;
So that will complete the test file about transaction subsystem
definitions for example.

Change-Id: I5e44c2b4933afadf96743641279016af5afc39e0
JIRA: PARSER-68
Signed-off-by: shangxdy <shang.xiaodong@zte.com.cn>
tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/definitions.yaml
tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/system.yaml
tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml [new file with mode: 0644]
tosca2heat/tosca-parser/toscaparser/tests/test_topology_template.py
tosca2heat/tosca-parser/toscaparser/tosca_template.py

index cfa0614..e8e8c8a 100644 (file)
@@ -1,6 +1,23 @@
 tosca_definitions_version: tosca_simple_yaml_1_0
 
 node_types:
+  example.QueuingSubsystem:
+    derived_from: tosca.nodes.SoftwareComponent
+    properties:
+      server_ip:
+        type: string
+      server_port:
+        type: integer
+    requirements:
+      - receiver1:
+          node: example.TransactionSubsystem
+          capability: example.capabilities.Receiver
+          relationship: tosca.relationships.ConnectsTo
+      - receiver2:
+          node: example.TransactionSubsystem
+          capability: example.capabilities.Receiver
+          relationship: tosca.relationships.ConnectsTo
+
   example.TransactionSubsystem:
     properties:
       mq_server_ip:
@@ -17,18 +34,8 @@ node_types:
         type: example.capabilities.Receiver
     requirements:
       - database_endpoint:
-          capability: tosca.capabilities.Endpoint.Database
           node: tosca.nodes.Database
-          relationship: tosca.relationships.ConnectsTo
-
-  example.QueuingSubsystem:
-    derived_from: tosca.nodes.SoftwareComponent
-    requirements:
-      - receiver1:
-          node: example.TransactionSubsystem
-          relationship: tosca.relationships.ConnectsTo
-      - receiver2:
-          node: example.TransactionSubsystem
+          capability: tosca.capabilities.Endpoint.Database
           relationship: tosca.relationships.ConnectsTo
 
   example.DatabaseSubsystem:
@@ -44,6 +51,11 @@ node_types:
     capabilities:
       message_receiver:
         type: example.capabilities.Receiver
+    requirements:
+      - database:
+          node: tosca.nodes.Database
+          capability: tosca.capabilities.Endpoint.Database
+          relationship: tosca.relationships.ConnectsTo
 
 capability_types:
    example.capabilities.Receiver:
index 9996e4f..84d625d 100644 (file)
@@ -7,11 +7,24 @@ imports:
 topology_template:
   description: Template of online transaction processing service.
 
+  inputs:
+    mq_server_ip:
+      type: string
+      default: 127.0.0.1
+      description: IP address of the message queuing server to receive messages from.
+    mq_server_port:
+      type: integer
+      default1: 8080
+      description: Port to be used for receiving messages.
+
   node_templates:
     mq:
       type: example.QueuingSubsystem
       # properties:
         # to be updated when substitution_mapping is implemented
+      properties:
+        server_ip: { get_input: mq_server_ip }
+        server_port: { get_input: mq_server_port }
       # capabilities:
         # message_queue_endpoint:
           # to be updated when substitution_mapping is implemented
diff --git a/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml b/tosca2heat/tosca-parser/toscaparser/tests/data/topology_template/transactionsubsystem.yaml
new file mode 100644 (file)
index 0000000..0f145a3
--- /dev/null
@@ -0,0 +1,88 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+  Transaction subsystem, which is service template with topology_template,
+  act as a nested system inside another system and also act as stand
+  alone service template.
+
+imports:
+  - definitions.yaml
+
+topology_template:
+  description: Template of a database including its hosting stack.
+
+  inputs:
+    mq_server_ip:
+      type: string
+      description: IP address of the message queuing server to receive messages from.
+      default: 127.0.0.1
+    receiver_port:
+      type: integer
+      description: Port to be used for receiving messages.
+      default: 8080
+    my_cpus:
+      type: integer
+      description: Number of CPUs for the server.
+      default: 2
+      constraints:
+        - valid_values: [ 1, 2, 4, 8 ]
+
+  substitution_mappings:
+    node_type: example.TransactionSubsystem
+    capabilities:
+      message_receiver: [ app, message_receiver ]
+    requirements:
+      database_endpoint: [ app, database ]
+
+  node_templates:
+    app:
+      type: example.SomeApp
+      properties:
+        admin_user: foo
+        pool_size: 10
+      capabilities:
+        message_receiver:
+          properties:
+            server_ip: { get_input: mq_server_ip }
+      requirements:
+        - host:
+            node: websrv
+
+    websrv:
+      type: tosca.nodes.WebServer
+      capabilities:
+        data_endpoint:
+          properties:
+            port_name: { get_input: receiver_port }
+      requirements:
+        - host:
+            node: server
+
+    server:
+      type: tosca.nodes.Compute
+      capabilities:
+        host:
+          properties:
+            disk_size: 10 GB
+            num_cpus: { get_input: my_cpus }
+            mem_size: 4096 MB
+        os:
+          properties:
+            architecture: x86_64
+            type: Linux
+            distribution: Ubuntu
+            version: 14.04
+
+  outputs:
+    receiver_ip:
+      description: private IP address of the message receiver application
+      value: { get_attribute: [ server, private_address ] }
+# It seems current _process_intrisic_function can not handle more than 2 arguments, save it for later
+#    receiver_port:
+#      description: Port of the message receiver endpoint
+#      value: { get_attribute: [ app, data_endpoint, port_name ] }
+
+  groups:
+    webserver_group:
+      members: [ websrv, server ]
+      type: tosca.groups.Root
index 0f1a33e..14f2496 100644 (file)
@@ -27,7 +27,7 @@ class TopologyTemplateTest(TestCase):
         '''TOSCA template.'''
         self.tosca_tpl_path = os.path.join(
             os.path.dirname(os.path.abspath(__file__)),
-            "data/topology_template/subsystem.yaml")
+            "data/topology_template/transactionsubsystem.yaml")
         self.tpl = YAML_LOADER(self.tosca_tpl_path)
         self.topo_tpl = self.tpl.get('topology_template')
         self.imports = self.tpl.get('imports')
@@ -157,4 +157,6 @@ class TopologyTemplateTest(TestCase):
         tpl_path = os.path.join(
             os.path.dirname(os.path.abspath(__file__)),
             "data/topology_template/system.yaml")
-        self.assertIsNotNone(ToscaTemplate(tpl_path))
+        system_tosca_template = ToscaTemplate(tpl_path)
+        self.assertIsNotNone(system_tosca_template)
+        self.assertEqual(len(system_tosca_template.nested_tosca_template), 0)
index 8753a2c..5da34d6 100644 (file)
@@ -216,7 +216,7 @@ class ToscaTemplate(object):
                     path=filename, parsed_params=self.parsed_params,
                     yaml_dict_tpl=tosca_tpl)
                 if nested_template.topology_template.substitution_mappings:
-                    self.nested_tosca_template.apend(nested_template)
+                    self.nested_tosca_template.append(nested_template)
 
     def _validate_field(self):
         version = self._tpl_version()