Merge "Fix odd naming of rcord synchronizer container"
diff --git a/examples/test-images.yaml b/examples/api-test-images.yaml
similarity index 100%
rename from examples/test-images.yaml
rename to examples/api-test-images.yaml
diff --git a/examples/candidate-tag-values.yaml b/examples/api-test-values.yaml
similarity index 81%
rename from examples/candidate-tag-values.yaml
rename to examples/api-test-values.yaml
index 68d0d86..dc43f9b 100644
--- a/examples/candidate-tag-values.yaml
+++ b/examples/api-test-values.yaml
@@ -13,28 +13,31 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set all image tags to "candidate" to use imagebuilder's local images
-# Also set imagePullPolicy to IfNotPresent, so these images will be used.
+# Values file for API tests
+#
+# The test process is to install minikube directly on a machine with docker
+# installed (`--vm-driver=none`) then use imagebuilder to build images with
+# candidate tags into that local docker registry, and run the tests.
 
-# in xos-core, rcord-lite, onos and voltha charts
+# shared by xos-core, rcord-lite, etc.
 imagePullPolicy: 'IfNotPresent'
 
-# in xos-core chart
+# xos core
+xos-gui:
+  enabled: false
+
 xos_coreImage: 'xosproject/xos-core:candidate'
 xos_chameleonImage: 'xosproject/chameleon:candidate'
 xos_toscaImage: 'xosproject/xos-tosca:candidate'
 xos_api_testerImage: 'xosproject/xos-api-tester:candidate'
 
-# in xos-gui sub-chart required by xos-core chart
-xos-gui:
-  xos_guiImage: 'xosproject/xos-gui:candidate'
-  xos_wsImage: 'xosproject/xos-ws:candidate'
-  imagePullPolicy: 'IfNotPresent'
-
-# in rcord-lite chart
+# rcord-lite
 rcord_synchronizerImage: "xosproject/rcord-synchronizer:candidate"
 
-# in service charts
+# xossh
+xosshImage: 'xosproject/xos-client:candidate'
+
+# XOS service charts
 addressmanager:
   addressmanager_synchronizerImage: "xosproject/addressmanager-synchronizer:candidate"
   imagePullPolicy: 'IfNotPresent'
diff --git a/examples/candidate-tag-values.yaml b/examples/image-tag-candidate.yaml
similarity index 76%
copy from examples/candidate-tag-values.yaml
copy to examples/image-tag-candidate.yaml
index 68d0d86..8b7f3b4 100644
--- a/examples/candidate-tag-values.yaml
+++ b/examples/image-tag-candidate.yaml
@@ -13,11 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set all image tags to "candidate" to use imagebuilder's local images
-# Also set imagePullPolicy to IfNotPresent, so these images will be used.
-
-# in xos-core, rcord-lite, onos and voltha charts
-imagePullPolicy: 'IfNotPresent'
+# Set all image tags to "candidate" to use locally built images
 
 # in xos-core chart
 xos_coreImage: 'xosproject/xos-core:candidate'
@@ -29,7 +25,6 @@
 xos-gui:
   xos_guiImage: 'xosproject/xos-gui:candidate'
   xos_wsImage: 'xosproject/xos-ws:candidate'
-  imagePullPolicy: 'IfNotPresent'
 
 # in rcord-lite chart
 rcord_synchronizerImage: "xosproject/rcord-synchronizer:candidate"
@@ -37,26 +32,18 @@
 # in service charts
 addressmanager:
   addressmanager_synchronizerImage: "xosproject/addressmanager-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 fabric:
   fabric_synchronizerImage: "xosproject/fabric-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 onos-service:
   onos_synchronizerImage: "xosproject/onos-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 volt:
   volt_synchronizerImage: "xosproject/volt-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 vsg-hw:
   vsg_hw_synchronizerImage: "xosproject/vsg-hw-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 vrouter:
   vrouter_synchronizerImage: "xosproject/vrouter-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 kubernetes:
   kubernetes_synchronizerImage: "xosproject/kubernetes-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 simpleexampleservice:
   simpleexampleservice_synchronizerImage: "xosproject/simpleexampleservice-synchronizer:candidate"
-  imagePullPolicy: 'IfNotPresent'
 
diff --git a/examples/if-not-present-values.yaml b/examples/imagePullPolicy-IfNotPresent.yaml
similarity index 100%
rename from examples/if-not-present-values.yaml
rename to examples/imagePullPolicy-IfNotPresent.yaml
diff --git a/examples/test-values.yaml b/examples/kafka-single.yaml
similarity index 74%
rename from examples/test-values.yaml
rename to examples/kafka-single.yaml
index 9127993..31aa36c 100644
--- a/examples/test-values.yaml
+++ b/examples/kafka-single.yaml
@@ -13,8 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# API test values file
+# for development purposes deploy a single instance of kafka
 
-xos-gui:
-  enabled: false
-
+replicas: 1
+zookeeper:
+  servers: 1 # NOTE this differs from the zookeper documentation as the kafka chart is still referencing zookeper 0.5.0
\ No newline at end of file
diff --git a/xos-profiles/base-openstack/templates/_helpers.tpl b/xos-profiles/base-openstack/templates/_helpers.tpl
index 66a8e2d..bd4fcce 100644
--- a/xos-profiles/base-openstack/templates/_helpers.tpl
+++ b/xos-profiles/base-openstack/templates/_helpers.tpl
@@ -45,20 +45,3 @@
 {{- define "base-openstack.chart" -}}
 {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
 {{- end -}}
-
-{{/*
-The R-CORD synchronizer loads R-CORD-specific models into the core
-*/}}
-
-{{- define "rcord.serviceConfig" -}}
-name: rcord
-accessor:
-  username: {{ .Values.xosAdminUser | quote }}
-  password: {{ .Values.xosAdminPassword | quote }}
-  endpoint: xos-core:50051
-dependency_graph: "/opt/xos/synchronizers/rcord/model-deps"
-sys_dir: "/opt/xos/synchronizers/rcord/sys"
-models_dir: "/opt/xos/synchronizers/rcord/models"
-model_policies_dir: "/opt/xos/synchronizers/rcord/model_policies"
-{{- end -}}
-
diff --git a/xos-profiles/base-openstack/templates/_tosca.tpl b/xos-profiles/base-openstack/templates/_tosca.tpl
new file mode 100644
index 0000000..962047c
--- /dev/null
+++ b/xos-profiles/base-openstack/templates/_tosca.tpl
@@ -0,0 +1,150 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "base-openstack.fixtureTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+  - custom_types/deployment.yaml
+  - custom_types/site.yaml
+  - custom_types/networktemplate.yaml
+  - custom_types/network.yaml
+  - custom_types/networkslice.yaml
+  - custom_types/sitedeployment.yaml
+
+description: set up site and deployment and link them
+
+topology_template:
+  node_templates:
+
+    {{ .Values.cordSiteName }}:
+      type: tosca.nodes.Site
+      properties:
+          name: {{ .Values.cordSiteName }}
+          site_url: http://mysite.opencord.us/
+          hosts_nodes: true
+
+    {{ .Values.cordDeploymentName }}:
+      type: tosca.nodes.Deployment
+      properties:
+        name: {{ .Values.cordDeploymentName }}
+{{- end -}}
+
+{{- define "base-openstack.serviceGraphTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+   - custom_types/onosapp.yaml
+   - custom_types/servicegraphconstraint.yaml
+   - custom_types/serviceinstancelink.yaml
+   - custom_types/vtnservice.yaml
+
+description: Configures the base-openstack service graph
+
+topology_template:
+  node_templates:
+
+    service#vtn:
+      type: tosca.nodes.VTNService
+      properties:
+        name: vtn
+        must-exist: true
+        resync: false
+
+    VTN_ONOS_app:
+      type: tosca.nodes.ONOSApp
+      properties:
+          name: VTN_ONOS_app
+          must-exist: true
+
+    VTN_ONOS_app_VTN_Service:
+        type: tosca.nodes.ServiceInstanceLink
+        requirements:
+          - provider_service_instance:
+              node: VTN_ONOS_app
+              relationship: tosca.relationships.BelongsToOne
+          - subscriber_service:
+              node: service#vtn
+              relationship: tosca.relationships.BelongsToOne
+
+    constraints:
+      type: tosca.nodes.ServiceGraphConstraint
+      properties:
+        constraints: '[]'
+{{- end -}}
+
+{{- define "base-openstack.testTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+  - custom_types/flavor.yaml
+  - custom_types/image.yaml
+  - custom_types/site.yaml
+  - custom_types/network.yaml
+  - custom_types/networkslice.yaml
+  - custom_types/slice.yaml
+
+description: for testing basic openstack functionality
+
+topology_template:
+  node_templates:
+
+    Ubuntu-14.04:
+      type: tosca.nodes.Image
+      properties:
+        name: "Ubuntu 14.04 64-bit"
+        disk_format: QCOW2
+        container_format: BARE
+        path: https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201
+
+    {{ .Values.cordSiteName }}:
+      type: tosca.nodes.Site
+      properties:
+        name: {{ .Values.cordSiteName }}
+        must-exist: true
+
+# Define a test slice
+    {{ .Values.cordSiteName }}_test:
+      description: Test Slice
+      type: tosca.nodes.Slice
+      properties:
+        # network: noauto
+        name: {{ .Values.cordSiteName }}_test
+      requirements:
+        - site:
+            node: {{ .Values.cordSiteName }}
+            relationship: tosca.relationships.BelongsToOne
+        - default_image:
+            node: Ubuntu-14.04
+            relationship: tosca.relationships.BelongsToOne
+
+    management:
+      type: tosca.nodes.Network
+      properties:
+        name: management
+        must-exist: true
+
+# Connect test slice to management net
+    networkslice#management_to_{{ .Values.cordSiteName }}_test:
+        type: tosca.nodes.NetworkSlice
+        requirements:
+          - network:
+              node: management
+              relationship: tosca.relationships.BelongsToOne
+          - slice:
+              node: {{ .Values.cordSiteName }}_test
+              relationship: tosca.relationships.BelongsToOne
+{{- end -}}
\ No newline at end of file
diff --git a/xos-profiles/base-openstack/templates/tosca-configmap.yaml b/xos-profiles/base-openstack/templates/tosca-configmap.yaml
index 3d7edf8..6d4448e 100644
--- a/xos-profiles/base-openstack/templates/tosca-configmap.yaml
+++ b/xos-profiles/base-openstack/templates/tosca-configmap.yaml
@@ -19,10 +19,22 @@
 metadata:
   name: base-openstack-tosca
 data:
-  010-openstack.yaml: |
-{{ toYaml .Values.toscaRecipes.openstack | indent 4 }}
-  020-openstack-compute.yaml: |
+  010-fixtures.yaml: |
+{{ include "base-openstack.fixtureTosca" . | indent 4 }}
+  020-openstack-controller.yaml: |
+{{ include "openstack.controllerTosca" .Values | indent 4 }}
+  030-openstack-flavors.yaml: |
+{{ include "openstack.flavorTosca" .Values.openstack | indent 4 }}
+  040-vtn-service.yaml: |
+{{ include "vtn-service.serviceTosca" (index .Values "vtn-service") | indent 4 }}
+  050-openstack-compute.yaml: |
 {{ toYaml .Values.toscaRecipes.openstackCompute | indent 4 }}
-  030-vtn-service.yaml: |
-{{ toYaml .Values.toscaRecipes.vtnService | indent 4 }}
+  060-openstack-networks.yaml: |
+{{ include "openstack.networkTosca" .Values | indent 4 }}
+  070-onos-service-vtn-app.yaml: |
+{{ include "onos-service.vtnAppTosca" (index .Values "onos-service") | indent 4 }}
+  300-service-graph.yaml: |
+{{ include "base-openstack.serviceGraphTosca" . | indent 4 }}
+  400-openstack-test.yaml: |
+{{ include "base-openstack.testTosca" . | indent 4 }}
 
diff --git a/xos-profiles/base-openstack/values.yaml b/xos-profiles/base-openstack/values.yaml
index cc02e32..dbf6a9a 100644
--- a/xos-profiles/base-openstack/values.yaml
+++ b/xos-profiles/base-openstack/values.yaml
@@ -26,190 +26,19 @@
 
 httpieImage: "clue/httpie:latest"
 
-xosAdminUser: &adminuser "admin@opencord.org"
-xosAdminPassword: &adminpass "letmein"
+xosAdminUser: "admin@opencord.org"
+xosAdminPassword: "letmein"
+
+cordSiteName:  &site "mysite"
+cordDeploymentName: &deployment "mydeployment"
+
+keystoneAdminUser: "admin"
+keystoneAdminPassword: "password"
+keystoneAdminTenant: "admin"
+keystoneDomain: "Default"
 
 # TOSCA recipes for the tosca-loader
 toscaRecipes:
-  openstack:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-
-    imports:
-      - custom_types/controller.yaml
-      - custom_types/controllersite.yaml
-      - custom_types/deployment.yaml
-      - custom_types/flavor.yaml
-      - custom_types/image.yaml
-      - custom_types/site.yaml
-      - custom_types/networktemplate.yaml
-      - custom_types/network.yaml
-      - custom_types/networkslice.yaml
-      - custom_types/slice.yaml
-      - custom_types/sitedeployment.yaml
-
-    description: openstack extensions to deployment
-
-    topology_template:
-      node_templates:
-
-    # Images and flavors
-        Ubuntu-14.04:
-          type: tosca.nodes.Image
-          properties:
-            name: "Ubuntu 14.04 64-bit"
-            disk_format: QCOW2
-            container_format: BARE
-            path: https://github.com/opencord/platform-install/releases/download/vms/trusty-server-cloudimg-amd64-disk1.img.20170201
-
-        m1.tiny:
-          type: tosca.nodes.Flavor
-          properties:
-            name: m1.tiny
-
-        m1.small:
-          type: tosca.nodes.Flavor
-          properties:
-            name: m1.small
-
-        m1.medium:
-          type: tosca.nodes.Flavor
-          properties:
-            name: m1.medium
-
-        m1.large:
-          type: tosca.nodes.Flavor
-          properties:
-            name: m1.large
-
-        m1.xlarge:
-          type: tosca.nodes.Flavor
-          properties:
-            name: m1.xlarge
-
-        MyDeployment:
-          type: tosca.nodes.Deployment
-          properties:
-            name: MyDeployment
-
-    # OpenStack Controller
-        mysite_MyDeployment_openstack:
-          type: tosca.nodes.Controller
-          requirements:
-            - deployment:
-                node: MyDeployment
-                relationship: tosca.relationships.BelongsToOne
-          properties:
-              name: mysite_MyDeployment_openstack
-              backend_type: OpenStack
-              version: Newton
-              auth_url: http://keystone.openstack.svc.cluster.local/v3
-              admin_user: admin
-              admin_password: password
-              admin_tenant: admin
-              domain: Default
-
-    # Site - adds openstack controller to site defined in deployment.yaml
-        mysite:
-          type: tosca.nodes.Site
-          properties:
-              name: mysite
-              must-exist: true
-              site_url: http://mysite.opencloud.us/
-              hosts_nodes: true
-
-        mysite_deployment_MyDeployment:
-            type: tosca.nodes.SiteDeployment
-            requirements:
-                - site:
-                    node: mysite
-                    relationship: tosca.relationships.BelongsToOne
-                - deployment:
-                    node: MyDeployment
-                    relationship: tosca.relationships.BelongsToOne
-                - controller:
-                    node: mysite_MyDeployment_openstack
-                    relationship: tosca.relationships.BelongsToOne
-
-        mysite_openstack_controller:
-            type: tosca.nodes.ControllerSite
-            requirements:
-                - site:
-                    node: mysite
-                    relationship: tosca.relationships.BelongsToOne
-                - controller:
-                    node: mysite_MyDeployment_openstack
-                    relationship: tosca.relationships.BelongsToOne
-
-    # For creating a test VM
-        mysite_test:
-          description: Test Slice
-          type: tosca.nodes.Slice
-          properties:
-            # network: noauto
-            name: mysite_test
-          requirements:
-            - site:
-                node: mysite
-                relationship: tosca.relationships.BelongsToOne
-            - default_image:
-                node: Ubuntu-14.04
-                relationship: tosca.relationships.BelongsToOne
-
-    # For private networks (e.g., per-slice)
-        private_template:
-          type: tosca.nodes.NetworkTemplate
-          properties:
-            name: Private
-            visibility: private
-            translation: none
-            vtn_kind: PRIVATE
-
-    # management (vtn: MANAGEMENT_LOCAL) network
-        management_template:
-          type: tosca.nodes.NetworkTemplate
-          properties:
-            name: management_template
-            visibility: private
-            translation: none
-            vtn_kind: MANAGEMENT_LOCAL
-
-        management:
-          type: tosca.nodes.Network
-          properties:
-            name: management
-            # ip_version: 4
-            subnet: 172.27.0.0/24
-            permit_all_slices: true
-          requirements:
-            - template:
-                node: management_template
-                relationship: tosca.relationships.BelongsToOne
-            - owner:
-                node: slice#mysite_management
-                relationship: tosca.relationships.BelongsToOne
-
-    # Slice to own management networks
-        slice#mysite_management:
-          description: This slice exists solely to own the management network(s)
-          type: tosca.nodes.Slice
-          properties:
-            network: noauto
-            name: mysite_management
-          requirements:
-            - site:
-                node: mysite
-                relationship: tosca.relationships.BelongsToOne
-
-    # Connect mysite_test to management net
-        networkslice#management_to_mysite_test:
-            type: tosca.nodes.NetworkSlice
-            requirements:
-              - network:
-                  node: management
-                  relationship: tosca.relationships.BelongsToOne
-              - slice:
-                  node: mysite_test
-                  relationship: tosca.relationships.BelongsToOne
   openstackCompute:
     tosca_definitions_version: tosca_simple_yaml_1_0
 
@@ -225,26 +54,26 @@
       node_templates:
 
     # Site/Deployment, fully defined in deployment.yaml
-        mysite:
+        site:
           type: tosca.nodes.Site
           properties:
-            name: mysite
+            name: *site
             must-exist: true
 
-        MyDeployment:
+        deployment:
           type: tosca.nodes.Deployment
           properties:
-            name: MyDeployment
+            name: *deployment
             must-exist: true
 
-        mysite_MyDeployment:
+        site_deployment:
           type: tosca.nodes.SiteDeployment
           requirements:
             - site:
-                node: mysite
+                node: site
                 relationship: tosca.relationships.BelongsToOne
             - deployment:
-                node: MyDeployment
+                node: deployment
                 relationship: tosca.relationships.BelongsToOne
 
     # OpenStack compute nodes
@@ -258,7 +87,7 @@
             dataPlaneIp: 10.6.1.1/24
           requirements:
             - site_deployment:
-                node:  mysite_MyDeployment
+                node:  site_deployment
                 relationship: tosca.relationships.BelongsToOne
 
         compute1:
@@ -270,7 +99,7 @@
             dataPlaneIp: 10.6.1.17/24
           requirements:
             - site_deployment:
-                node:  mysite_MyDeployment
+                node:  site_deployment
                 relationship: tosca.relationships.BelongsToOne
 
         compute2:
@@ -282,79 +111,5 @@
             dataPlaneIp: 10.6.1.18/24
           requirements:
             - site_deployment:
-                node:  mysite_MyDeployment
+                node:  site_deployment
                 relationship: tosca.relationships.BelongsToOne
-
-  vtnService:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-
-    imports:
-       - custom_types/onosapp.yaml
-       - custom_types/onosservice.yaml
-       - custom_types/serviceinstanceattribute.yaml
-       - custom_types/serviceinstancelink.yaml
-       - custom_types/vtnservice.yaml
-
-    description: Configures the VTN ONOS service
-
-    topology_template:
-      node_templates:
-
-        service#ONOS_CORD:
-          type: tosca.nodes.ONOSService
-          properties:
-              name: ONOS_CORD
-              kind: platform
-              no_container: true
-              rest_hostname: onos-cord-ui
-              rest_port: 8181
-
-        service#vtn:
-          type: tosca.nodes.VTNService
-          properties:
-              name: vtn
-              kind: platform
-              view_url: /admin/vtn/vtnservice/$id$/
-              privateGatewayMac: 00:00:00:00:00:01
-              localManagementIp: 172.27.0.1/24
-              ovsdbPort: 6641
-              sshUser: vagrant
-              sshKeyFile: /root/node_key
-              sshPort: 22
-              xosEndpoint: xos-chameleon:9101
-              xosUser: *adminuser
-              xosPassword: *adminpass
-              vtnAPIVersion: 2
-              controllerPort: onos-cord-openflow:6653
-              resync: false
-
-        VTN_ONOS_app:
-          type: tosca.nodes.ONOSApp
-          requirements:
-              - owner:
-                  node: service#ONOS_CORD
-                  relationship: tosca.relationships.BelongsToOne
-          properties:
-              name: VTN_ONOS_app
-              install_dependencies: https://repo.maven.apache.org/maven2/org/opencord/cord-config/1.3.1/cord-config-1.3.1.oar, https://repo.maven.apache.org/maven2/org/opencord/vtn/1.5.0/vtn-1.5.0.oar
-              dependencies: org.onosproject.drivers, org.onosproject.drivers.ovsdb, org.onosproject.openflow-base, org.onosproject.ovsdb-base, org.onosproject.dhcp
-
-        VTN_ONOS_app_autogenerate:
-            type: tosca.nodes.ServiceInstanceAttribute
-            requirements:
-              - service_instance:
-                  node: VTN_ONOS_app
-                  relationship: tosca.relationships.BelongsToOne
-            properties:
-                name: autogenerate
-                value: vtn-network-cfg
-
-        VTN_ONOS_app_VTN_Service:
-            type: tosca.nodes.ServiceInstanceLink
-            requirements:
-              - provider_service_instance:
-                  node: VTN_ONOS_app
-                  relationship: tosca.relationships.BelongsToOne
-              - subscriber_service:
-                  node: service#vtn
-                  relationship: tosca.relationships.BelongsToOne
diff --git a/xos-profiles/rcord-lite/templates/_tosca.tpl b/xos-profiles/rcord-lite/templates/_tosca.tpl
new file mode 100644
index 0000000..c9985ae
--- /dev/null
+++ b/xos-profiles/rcord-lite/templates/_tosca.tpl
@@ -0,0 +1,237 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "rcord-lite.basicFixturesTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+description: Some basic fixtures
+imports:
+  - custom_types/siterole.yaml
+  - custom_types/slicerole.yaml
+  - custom_types/networkparametertype.yaml
+  - custom_types/networktemplate.yaml
+  - custom_types/deployment.yaml
+topology_template:
+  node_templates:
+
+# -----------------------------------------------------------------------------
+# Network Parameter Types
+# -----------------------------------------------------------------------------
+    s_tag:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: s_tag
+    c_tag:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: c_tag
+    next_hop:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: next_hop
+    device:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: device
+    bridge:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: bridge
+    neutron_port_name:
+      type: tosca.nodes.NetworkParameterType
+      properties:
+        name: neutron_port_name
+
+# ----------------------------------------------------------------------------
+# Roles
+# ----------------------------------------------------------------------------
+    siterole#admin:
+      type: tosca.nodes.SiteRole
+      properties:
+        role: admin
+    siterole#pi:
+      type: tosca.nodes.SiteRole
+      properties:
+        role: pi
+    siterole#tech:
+      type: tosca.nodes.SiteRole
+      properties:
+        role: tech
+    slicerole#admin:
+      type: tosca.nodes.SliceRole
+      properties:
+        role: admin
+    slicerole#access:
+      type: tosca.nodes.SliceRole
+      properties:
+        role: access
+
+# -----------------------------------------------------------------------------
+# Network Templates
+# -----------------------------------------------------------------------------
+    Private:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        name: Private
+        visibility: private
+        translation: none
+
+    Public shared IPv4:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        name: Public shared IPv4
+        visibility: private
+        translation: NAT
+        shared_network_name: nat-net
+
+    Public dedicated IPv4:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        name: Public dedicated IPv4
+        visibility: public
+        translation: none
+        shared_network_name: ext-net
+
+# -----------------------------------------------------------------------------
+# Deployment
+# -----------------------------------------------------------------------------
+    MyDeployment:
+      type: tosca.nodes.Deployment
+      properties:
+        name: MyDeployment
+{{- end -}}
+
+
+{{- define "rcord-lite.serviceGraphTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/fabricservice.yaml
+  - custom_types/onosservice.yaml
+  - custom_types/rcordservice.yaml
+  - custom_types/vrouterservice.yaml
+  - custom_types/voltservice.yaml
+  - custom_types/vsghwservice.yaml
+  - custom_types/servicedependency.yaml
+  - custom_types/servicegraphconstraint.yaml
+description: rcord-lite service graph
+topology_template:
+  node_templates:
+
+# These services must be defined before loading the graph
+
+    service#ONOS_Fabric:
+      type: tosca.nodes.ONOSService
+      properties:
+        name: ONOS_Fabric
+        must-exist: true
+
+    service#fabric:
+      type: tosca.nodes.FabricService
+      properties:
+        name: fabric
+        must-exist: true
+
+    service#rcord:
+      type: tosca.nodes.RCORDService
+      properties:
+        name: rcord
+        must-exist: true
+
+    service#vrouter:
+      type: tosca.nodes.VRouterService
+      properties:
+        name: vrouter
+        must-exist: true
+
+    service#volt:
+      type: tosca.nodes.VOLTService
+      properties:
+        name: volt
+        must-exist: true
+
+    service#vsg-hw:
+      type: tosca.nodes.VSGHWService
+      properties:
+        name: vsg-hw
+        must-exist: true
+
+# The rcord-lite service graph
+
+    service_dependency#onos-fabric_fabric:
+      type: tosca.nodes.ServiceDependency
+      properties:
+        connect_method: None
+      requirements:
+        - subscriber_service:
+            node: service#ONOS_Fabric
+            relationship: tosca.relationships.BelongsToOne
+        - provider_service:
+            node: service#fabric
+            relationship: tosca.relationships.BelongsToOne
+
+    service_dependency#rcord_volt:
+      type: tosca.nodes.ServiceDependency
+      properties:
+        connect_method: None
+      requirements:
+        - subscriber_service:
+            node: service#rcord
+            relationship: tosca.relationships.BelongsToOne
+        - provider_service:
+            node: service#volt
+            relationship: tosca.relationships.BelongsToOne
+
+    service_dependency#fabric_vrouter:
+      type: tosca.nodes.ServiceDependency
+      properties:
+        connect_method: None
+      requirements:
+        - subscriber_service:
+            node: service#fabric
+            relationship: tosca.relationships.BelongsToOne
+        - provider_service:
+            node: service#vrouter
+            relationship: tosca.relationships.BelongsToOne
+
+    service_dependency#volt_vsg-hw:
+      type: tosca.nodes.ServiceDependency
+      properties:
+        connect_method: None
+      requirements:
+        - subscriber_service:
+            node: service#volt
+            relationship: tosca.relationships.BelongsToOne
+        - provider_service:
+            node: service#vsg-hw
+            relationship: tosca.relationships.BelongsToOne
+
+    service_dependency#onos_fabric_vsg-hw:
+      type: tosca.nodes.ServiceDependency
+      properties:
+        connect_method: None
+      requirements:
+        - subscriber_service:
+            node: service#vsg-hw
+            relationship: tosca.relationships.BelongsToOne
+        - provider_service:
+            node: service#ONOS_Fabric
+            relationship: tosca.relationships.BelongsToOne
+
+    constraints:
+      type: tosca.nodes.ServiceGraphConstraint
+      properties:
+        constraints: '[[null, "rcord"], [null, "volt"], ["ONOS_Fabric", "vsg-hw"], ["fabric", null], ["vrouter", null]]'
+{{- end -}}
+
diff --git a/xos-profiles/rcord-lite/templates/tosca-configmap.yaml b/xos-profiles/rcord-lite/templates/tosca-configmap.yaml
index f39acb3..e4a5f40 100644
--- a/xos-profiles/rcord-lite/templates/tosca-configmap.yaml
+++ b/xos-profiles/rcord-lite/templates/tosca-configmap.yaml
@@ -20,12 +20,18 @@
   name: rcord-lite-tosca
 data:
   010-fixtures.yaml: |
-{{ toYaml .Values.toscaRecipes.fixtures | indent 4 }}
-  020-deployment.yaml: |
-{{ toYaml .Values.toscaRecipes.deployment | indent 4 }}
-  030-fabric-service.yaml: |
-{{ toYaml .Values.toscaRecipes.fabricService | indent 4 }}
-  040-cord-services.yaml: |
-{{ toYaml .Values.toscaRecipes.cordServices | indent 4 }}
-  050-service-graph-constraints.yaml: |
-{{ toYaml .Values.toscaRecipes.serviceGraphConstraints | indent 4 }}
+{{ include "rcord-lite.basicFixturesTosca" . | indent 4 }}
+  020-rcord-subscriber-service.yaml: |
+{{ include "rcord.serviceTosca" .Values.rcord | indent 4 }}
+  030-volt-service.yaml: |
+{{ include "volt.serviceTosca" .Values.volt | indent 4 }}
+  040-vsg-hw-service.yaml: |
+{{ include "vsg-hw.serviceTosca" (index .Values "vsg-hw") | indent 4 }}
+  050-vrouter-service.yaml: |
+{{ include "vrouter.serviceTosca" .Values.vrouter | indent 4 }}
+  060-onos-service-fabric.yaml: |
+{{ include "onos-service.fabricAppTosca" (index .Values "onos-service") | indent 4 }}
+  070-fabric-service.yaml: |
+{{ include "fabric.serviceTosca" .Values.fabric | indent 4 }}
+  300-service-graph.yaml: |
+{{ include "rcord-lite.serviceGraphTosca" . | indent 4 }}
diff --git a/xos-profiles/rcord-lite/values.yaml b/xos-profiles/rcord-lite/values.yaml
index 116d41f..3427e09 100644
--- a/xos-profiles/rcord-lite/values.yaml
+++ b/xos-profiles/rcord-lite/values.yaml
@@ -30,265 +30,3 @@
 xosAdminUser: "admin@opencord.org"
 xosAdminPassword: "letmein"
 
-# TOSCA recipes for the tosca-loader
-toscaRecipes:
-  fixtures:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-    description: Some basic fixtures
-    imports:
-      - custom_types/siterole.yaml
-      - custom_types/slicerole.yaml
-      - custom_types/networkparametertype.yaml
-      - custom_types/networktemplate.yaml
-    topology_template:
-      node_templates:
-    # -----------------------------------------------------------------------------
-    # Network Parameter Types
-    # -----------------------------------------------------------------------------
-        s_tag:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: s_tag
-        c_tag:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: c_tag
-        next_hop:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: next_hop
-        device:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: device
-        bridge:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: bridge
-        neutron_port_name:
-          type: tosca.nodes.NetworkParameterType
-          properties:
-            name: neutron_port_name
-    # ----------------------------------------------------------------------------
-    # Roles
-    # ----------------------------------------------------------------------------
-        siterole#admin:
-          type: tosca.nodes.SiteRole
-          properties:
-            role: admin
-        siterole#pi:
-          type: tosca.nodes.SiteRole
-          properties:
-            role: pi
-        siterole#tech:
-          type: tosca.nodes.SiteRole
-          properties:
-            role: tech
-        slicerole#admin:
-          type: tosca.nodes.SliceRole
-          properties:
-            role: admin
-        slicerole#access:
-          type: tosca.nodes.SliceRole
-          properties:
-            role: access
-    # -----------------------------------------------------------------------------
-    # Network Templates
-    # -----------------------------------------------------------------------------
-        Private:
-          type: tosca.nodes.NetworkTemplate
-          properties:
-            name: Private
-            visibility: private
-            translation: none
-        Public shared IPv4:
-          type: tosca.nodes.NetworkTemplate
-          properties:
-            name: Public shared IPv4
-            visibility: private
-            translation: NAT
-            shared_network_name: nat-net
-        Public dedicated IPv4:
-          type: tosca.nodes.NetworkTemplate
-          properties:
-            name: Public dedicated IPv4
-            visibility: public
-            translation: none
-            shared_network_name: ext-net
-
-  deployment:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-    imports:
-       - custom_types/deployment.yaml
-    description: deployment config, generated by platform-install
-    topology_template:
-      node_templates:
-        MyDeployment:
-          type: tosca.nodes.Deployment
-          properties:
-            name: MyDeployment
-
-  fabricService:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-    imports:
-      - custom_types/fabricservice.yaml
-      - custom_types/onosapp.yaml
-      - custom_types/onosservice.yaml
-      - custom_types/serviceattribute.yaml
-      - custom_types/servicedependency.yaml
-      - custom_types/serviceinstancelink.yaml
-    description: fabric services, generated by rcord profile
-    topology_template:
-      node_templates:
-        service#ONOS_Fabric:
-          type: tosca.nodes.ONOSService
-          properties:
-              name: ONOS_Fabric
-              kind: platform
-              no_container: true
-              rest_hostname: onos-fabric-ui
-              rest_port: 8181
-        service#fabric:
-          type: tosca.nodes.FabricService
-          properties:
-              name: fabric
-              kind: platform
-        Fabric_ONOS_app:
-          type: tosca.nodes.ONOSApp
-          requirements:
-              - owner:
-                  node: service#ONOS_Fabric
-                  relationship: tosca.relationships.BelongsToOne
-          properties:
-              name: Fabric_ONOS_app
-              dependencies: org.onosproject.drivers, org.onosproject.openflow, org.onosproject.netcfghostprovider, org.onosproject.segmentrouting, org.onosproject.vrouter
-        service_dependency#onos-fabric_fabric:
-          type: tosca.nodes.ServiceDependency
-          properties:
-            connect_method: None
-          requirements:
-            - subscriber_service:
-                node: service#ONOS_Fabric
-                relationship: tosca.relationships.BelongsToOne
-            - provider_service:
-                node: service#fabric
-                relationship: tosca.relationships.BelongsToOne
-
-  cordServices:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-    description: Set up VOLT, AddressManager, and RCORD services
-    imports:
-      - custom_types/fabricservice.yaml
-      - custom_types/image.yaml
-      - custom_types/kubernetesservice.yaml
-      - custom_types/network.yaml
-      - custom_types/networkslice.yaml
-      - custom_types/networktemplate.yaml
-      - custom_types/nodelabel.yaml
-      - custom_types/onosapp.yaml
-      - custom_types/onosservice.yaml
-      - custom_types/rcordservice.yaml
-      - custom_types/site.yaml
-      - custom_types/service.yaml
-      - custom_types/servicedependency.yaml
-      - custom_types/serviceinstanceattribute.yaml
-      - custom_types/serviceinstancelink.yaml
-      - custom_types/slice.yaml
-      - custom_types/voltservice.yaml
-      - custom_types/vrouterservice.yaml
-      - custom_types/vsghwservice.yaml
-    topology_template:
-      node_templates:
-        service#ONOS_Fabric:
-          type: tosca.nodes.ONOSService
-          properties:
-              name: ONOS_Fabric
-              must-exist: true
-        service#fabric:
-          type: tosca.nodes.FabricService
-          properties:
-              name: fabric
-              must-exist: true
-        service#rcord:
-          type: tosca.nodes.RCORDService
-          properties:
-            name: rcord
-        rcord_volt:
-          type: tosca.nodes.ServiceDependency
-          properties:
-            connect_method: None
-          requirements:
-            - subscriber_service:
-                node: service#rcord
-                relationship: tosca.relationships.BelongsToOne
-            - provider_service:
-                node: service#volt
-                relationship: tosca.relationships.BelongsToOne
-        service#kubernetes:
-          type: tosca.nodes.KubernetesService
-          properties:
-            name: kubernetes
-        service#volt:
-          type: tosca.nodes.VOLTService
-          properties:
-            name: volt
-            voltha_url: voltha.voltha.svc.cluster.local
-            voltha_port: 8882
-            onos_voltha_url: onos-voltha-ui.voltha.svc.cluster.local
-            onos_voltha_port: 8181
-            onos_voltha_user: karaf
-            onos_voltha_pass: karaf
-        service#vsg-hw:
-          type: tosca.nodes.VSGHWService
-          properties:
-            name: vsg-hw
-        service#vrouter:
-          type: tosca.nodes.VRouterService
-          properties:
-            name: vrouter
-            kind: rcord
-        service_dependency#fabric_vrouter:
-          type: tosca.nodes.ServiceDependency
-          properties:
-            connect_method: None
-          requirements:
-            - subscriber_service:
-                node: service#fabric
-                relationship: tosca.relationships.BelongsToOne
-            - provider_service:
-                node: service#vrouter
-                relationship: tosca.relationships.BelongsToOne
-        volt_vsg-hw:
-          type: tosca.nodes.ServiceDependency
-          properties:
-            connect_method: None
-          requirements:
-            - subscriber_service:
-                node: service#volt
-                relationship: tosca.relationships.BelongsToOne
-            - provider_service:
-                node: service#vsg-hw
-                relationship: tosca.relationships.BelongsToOne
-        onos_fabric_vsg-hw:
-          type: tosca.nodes.ServiceDependency
-          properties:
-            connect_method: None
-          requirements:
-            - subscriber_service:
-                node: service#vsg-hw
-                relationship: tosca.relationships.BelongsToOne
-            - provider_service:
-                node: service#ONOS_Fabric
-                relationship: tosca.relationships.BelongsToOne
-
-  serviceGraphConstraints:
-    tosca_definitions_version: tosca_simple_yaml_1_0
-    imports:
-       - custom_types/servicegraphconstraint.yaml
-    description: Constraints on the Services position in the graph
-    topology_template:
-      node_templates:
-        constraints:
-          type: tosca.nodes.ServiceGraphConstraint
-          properties:
-            constraints: '[[null, "rcord"], [null, "volt"], ["ONOS_Fabric", "vsg-hw"], ["fabric", null], ["vrouter", null]]'
diff --git a/xos-services/fabric/templates/_tosca.tpl b/xos-services/fabric/templates/_tosca.tpl
new file mode 100644
index 0000000..09f3810
--- /dev/null
+++ b/xos-services/fabric/templates/_tosca.tpl
@@ -0,0 +1,30 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "fabric.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+description: Set up Fabric service
+imports:
+  - custom_types/fabricservice.yaml
+
+topology_template:
+  node_templates:
+    service#fabric:
+      type: tosca.nodes.FabricService
+      properties:
+        name: fabric
+        kind: platform
+{{- end -}}
diff --git a/xos-services/onos-service/templates/_tosca.tpl b/xos-services/onos-service/templates/_tosca.tpl
new file mode 100644
index 0000000..67438b4
--- /dev/null
+++ b/xos-services/onos-service/templates/_tosca.tpl
@@ -0,0 +1,87 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "onos-service.fabricAppTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/onosapp.yaml
+  - custom_types/onosservice.yaml
+description: ONOS service and app for fabric
+topology_template:
+  node_templates:
+    service#ONOS_Fabric:
+      type: tosca.nodes.ONOSService
+      properties:
+          name: ONOS_Fabric
+          kind: platform
+          no_container: true
+          rest_hostname: onos-fabric-ui
+          rest_port: 8181
+
+    Fabric_ONOS_app:
+      type: tosca.nodes.ONOSApp
+      requirements:
+          - owner:
+              node: service#ONOS_Fabric
+              relationship: tosca.relationships.BelongsToOne
+      properties:
+          name: Fabric_ONOS_app
+          dependencies: org.onosproject.drivers, org.onosproject.openflow, org.onosproject.netcfghostprovider, org.onosproject.segmentrouting, org.onosproject.vrouter
+{{- end -}}
+
+{{- define "onos-service.vtnAppTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+   - custom_types/onosapp.yaml
+   - custom_types/onosservice.yaml
+   - custom_types/serviceinstanceattribute.yaml
+
+description: Configures the VTN ONOS service
+
+topology_template:
+  node_templates:
+
+    service#ONOS_CORD:
+      type: tosca.nodes.ONOSService
+      properties:
+          name: ONOS_CORD
+          kind: platform
+          no_container: true
+          rest_hostname: onos-cord-ui
+          rest_port: 8181
+
+    VTN_ONOS_app:
+      type: tosca.nodes.ONOSApp
+      requirements:
+          - owner:
+              node: service#ONOS_CORD
+              relationship: tosca.relationships.BelongsToOne
+      properties:
+          name: VTN_ONOS_app
+          install_dependencies: https://repo.maven.apache.org/maven2/org/opencord/cord-config/1.3.1/cord-config-1.3.1.oar, https://repo.maven.apache.org/maven2/org/opencord/vtn/1.5.0/vtn-1.5.0.oar
+          dependencies: org.onosproject.drivers, org.onosproject.drivers.ovsdb, org.onosproject.openflow-base, org.onosproject.ovsdb-base, org.onosproject.dhcp
+
+    VTN_ONOS_app_autogenerate:
+        type: tosca.nodes.ServiceInstanceAttribute
+        requirements:
+          - service_instance:
+              node: VTN_ONOS_app
+              relationship: tosca.relationships.BelongsToOne
+        properties:
+            name: autogenerate
+            value: vtn-network-cfg
+{{- end -}}
diff --git a/xos-services/openstack/templates/_helpers.tpl b/xos-services/openstack/templates/_helpers.tpl
index d0d413a..db369dd 100644
--- a/xos-services/openstack/templates/_helpers.tpl
+++ b/xos-services/openstack/templates/_helpers.tpl
@@ -45,7 +45,6 @@
 {{- define "openstack.chart" -}}
 {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
 {{- end -}}
-
 {{- define "openstack.serviceConfig" -}}
 name: openstack-synchronizer
 accessor:
diff --git a/xos-services/openstack/templates/_tosca.tpl b/xos-services/openstack/templates/_tosca.tpl
new file mode 100644
index 0000000..a2fdd94
--- /dev/null
+++ b/xos-services/openstack/templates/_tosca.tpl
@@ -0,0 +1,185 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "openstack.flavorTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+  - custom_types/flavor.yaml
+
+description: openstack flavor models
+
+topology_template:
+  node_templates:
+
+    m1.tiny:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.tiny
+
+    m1.small:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.small
+
+    m1.medium:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.medium
+
+    m1.large:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.large
+
+    m1.xlarge:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.xlarge
+{{- end -}}
+
+{{- define "openstack.networkTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+  - custom_types/network.yaml
+  - custom_types/networktemplate.yaml
+  - custom_types/site.yaml
+  - custom_types/slice.yaml
+
+description: openstack flavor models
+
+topology_template:
+  node_templates:
+
+    {{ .cordSiteName }}:
+      type: tosca.nodes.Site
+      properties:
+        name: {{ .cordSiteName }}
+        must-exist: true
+
+# For private networks (e.g., per-slice)
+    private_template:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        name: Private
+        visibility: private
+        translation: none
+        vtn_kind: PRIVATE
+
+# management (vtn: MANAGEMENT_LOCAL) network
+    management_template:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        name: management_template
+        visibility: private
+        translation: none
+        vtn_kind: MANAGEMENT_LOCAL
+
+    management:
+      type: tosca.nodes.Network
+      properties:
+        name: management
+        # ip_version: 4
+        subnet: 172.27.0.0/24
+        permit_all_slices: true
+      requirements:
+        - template:
+            node: management_template
+            relationship: tosca.relationships.BelongsToOne
+        - owner:
+            node: slice#{{ .cordSiteName }}_management
+            relationship: tosca.relationships.BelongsToOne
+
+# Slice to own management networks
+    slice#{{ .cordSiteName }}_management:
+      description: This slice exists solely to own the management network(s)
+      type: tosca.nodes.Slice
+      properties:
+        network: noauto
+        name: {{ .cordSiteName }}_management
+      requirements:
+        - site:
+            node: {{ .cordSiteName }}
+            relationship: tosca.relationships.BelongsToOne
+{{- end -}}
+
+{{- define "openstack.controllerTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+  - custom_types/controller.yaml
+  - custom_types/controllersite.yaml
+  - custom_types/deployment.yaml
+  - custom_types/site.yaml
+  - custom_types/sitedeployment.yaml
+
+description: openstack controller models
+
+topology_template:
+  node_templates:
+
+    {{ .cordSiteName }}:
+      type: tosca.nodes.Site
+      properties:
+          name: {{ .cordSiteName }}
+          must-exist: true
+
+    {{ .cordDeploymentName }}:
+      type: tosca.nodes.Deployment
+      properties:
+        name: {{ .cordDeploymentName }}
+        must-exist: true
+
+    {{ .cordSiteName }}_{{ .cordDeploymentName }}_openstack:
+      type: tosca.nodes.Controller
+      requirements:
+        - deployment:
+            node: {{ .cordDeploymentName }}
+            relationship: tosca.relationships.BelongsToOne
+      properties:
+          name: {{ .cordSiteName }}_{{ .cordDeploymentName }}_openstack
+          backend_type: OpenStack
+          version: Newton
+          auth_url: http://keystone.openstack.svc.cluster.local/v3
+          admin_user: {{ .keystoneAdminUser }}
+          admin_password: {{ .keystoneAdminPassword }}
+          admin_tenant: {{ .keystoneAdminTenant }}
+          domain: {{ .keystoneDomain }}
+
+    {{ .cordSiteName }}_deployment_{{ .cordDeploymentName }}:
+        type: tosca.nodes.SiteDeployment
+        requirements:
+            - site:
+                node: {{ .cordSiteName }}
+                relationship: tosca.relationships.BelongsToOne
+            - deployment:
+                node: {{ .cordDeploymentName }}
+                relationship: tosca.relationships.BelongsToOne
+            - controller:
+                node: {{ .cordSiteName }}_{{ .cordDeploymentName }}_openstack
+                relationship: tosca.relationships.BelongsToOne
+
+    {{ .cordSiteName }}_openstack_controller:
+        type: tosca.nodes.ControllerSite
+        requirements:
+            - site:
+                node: {{ .cordSiteName }}
+                relationship: tosca.relationships.BelongsToOne
+            - controller:
+                node: {{ .cordSiteName }}_{{ .cordDeploymentName }}_openstack
+                relationship: tosca.relationships.BelongsToOne
+{{- end -}}
diff --git a/xos-services/rcord/templates/_tosca.tpl b/xos-services/rcord/templates/_tosca.tpl
new file mode 100644
index 0000000..846837b
--- /dev/null
+++ b/xos-services/rcord/templates/_tosca.tpl
@@ -0,0 +1,28 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "rcord.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/rcordservice.yaml
+description: R-CORD service TOSCA
+topology_template:
+  node_templates:
+    service#rcord:
+      type: tosca.nodes.RCORDService
+      properties:
+        name: rcord
+{{- end -}}
diff --git a/xos-services/volt/templates/_tosca.tpl b/xos-services/volt/templates/_tosca.tpl
new file mode 100644
index 0000000..fffdab1
--- /dev/null
+++ b/xos-services/volt/templates/_tosca.tpl
@@ -0,0 +1,35 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "volt.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+description: Set up VOLT service
+imports:
+  - custom_types/voltservice.yaml
+
+topology_template:
+  node_templates:
+    service#volt:
+      type: tosca.nodes.VOLTService
+      properties:
+        name: volt
+        voltha_url: voltha.voltha.svc.cluster.local
+        voltha_port: 8882
+        onos_voltha_url: onos-voltha-ui.voltha.svc.cluster.local
+        onos_voltha_port: 8181
+        onos_voltha_user: karaf
+        onos_voltha_pass: karaf
+{{- end -}}
diff --git a/xos-services/vrouter/templates/_tosca.tpl b/xos-services/vrouter/templates/_tosca.tpl
new file mode 100644
index 0000000..7dce612
--- /dev/null
+++ b/xos-services/vrouter/templates/_tosca.tpl
@@ -0,0 +1,30 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "vrouter.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+description: Set up VRouter service
+imports:
+  - custom_types/vrouterservice.yaml
+
+topology_template:
+  node_templates:
+    service#vrouter:
+      type: tosca.nodes.VRouterService
+      properties:
+        name: vrouter
+        kind: rcord
+{{- end -}}
diff --git a/xos-services/vsg-hw/templates/_tosca.tpl b/xos-services/vsg-hw/templates/_tosca.tpl
new file mode 100644
index 0000000..d5d84be
--- /dev/null
+++ b/xos-services/vsg-hw/templates/_tosca.tpl
@@ -0,0 +1,29 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "vsg-hw.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+description: Set up VSG-HW service
+imports:
+  - custom_types/vsghwservice.yaml
+
+topology_template:
+  node_templates:
+    service#vsg-hw:
+      type: tosca.nodes.VSGHWService
+      properties:
+        name: vsg-hw
+{{- end -}}
diff --git a/xos-services/vtn-service/templates/_tosca.tpl b/xos-services/vtn-service/templates/_tosca.tpl
new file mode 100644
index 0000000..9edc27e
--- /dev/null
+++ b/xos-services/vtn-service/templates/_tosca.tpl
@@ -0,0 +1,46 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Copyright 2018-present Open Networking Foundation
+
+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.
+*/}}
+{{- define "vtn-service.serviceTosca" -}}
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+   - custom_types/vtnservice.yaml
+
+description: Configures the VTN ONOS service
+
+topology_template:
+  node_templates:
+
+    service#vtn:
+      type: tosca.nodes.VTNService
+      properties:
+          name: vtn
+          kind: platform
+          view_url: /admin/vtn/vtnservice/$id$/
+          privateGatewayMac: 00:00:00:00:00:01
+          localManagementIp: 172.27.0.1/24
+          ovsdbPort: 6641
+          sshUser: vagrant
+          sshKeyFile: /root/node_key
+          sshPort: 22
+          xosEndpoint: xos-chameleon:9101
+          xosUser: {{ .xosAdminUser }}
+          xosPassword: {{ .xosAdminPassword }}
+          vtnAPIVersion: 2
+          controllerPort: onos-cord-openflow:6653
+          resync: false
+{{- end -}}