CORD-2282 Create mcord-ng4t profile

Change-Id: Ib9f4bf71d04b21f6a9592527f901f5a5425a0b4e
(cherry picked from commit d730b6dc465b0f7ecff6491d1b47cde9e36db037)
diff --git a/mcord-ng4t-test-playbook.yml b/mcord-ng4t-test-playbook.yml
new file mode 100644
index 0000000..be3b403
--- /dev/null
+++ b/mcord-ng4t-test-playbook.yml
@@ -0,0 +1,58 @@
+
+# Copyright 2017-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.
+
+
+---
+# mcord-ng4t-test-playbook.yml
+# Tests CiaB cord-pod XOS configuration
+
+- name: Include vars
+  hosts: all
+  tasks:
+    - name: Include variables
+      include_vars: "{{ item }}"
+      with_items:
+        - "profile_manifests/{{ cord_profile }}.yml"
+        - profile_manifests/local_vars.yml
+
+- name: Run base M-CORD tests
+  hosts: head
+  become: no
+  # These variables could be elevated to the profile. Think about
+  # doing this after the E2E test framework is complete.
+  vars:
+    test_networks:
+      - management
+      - sgi_network
+      - s11_network
+      - spgw_network
+    test_services:
+      - venb
+      - vspgwc
+      - vspgwu
+    test_ports:
+      - { vm: venb, network: management }
+      - { vm: venb, network: s11_network }
+      - { vm: venb, network: sgi_network }
+      - { vm: venb, network: s1u_network }
+      - { vm: vspgwc, network: management }
+      - { vm: vspgwc, network: s11_network }
+      - { vm: vspgwc, network: spgw_network }
+      - { vm: vspgwu, network: management }
+      - { vm: vspgwu, network: s1u_network }
+      - { vm: vspgwu, network: sgi_network }
+      - { vm: vspgwu, network: spgw_network }
+  roles:
+    - test-mcord-base
diff --git a/mcord-spirent-test-playbook.yml b/mcord-spirent-test-playbook.yml
index 66af4e3..a80a61f 100644
--- a/mcord-spirent-test-playbook.yml
+++ b/mcord-spirent-test-playbook.yml
@@ -15,7 +15,7 @@
 
 
 ---
-# mcord-test-playbook.yml
+# mcord-spirent-test-playbook.yml
 # Tests CiaB cord-pod XOS configuration
 
 - name: Include vars
@@ -30,5 +30,29 @@
 - name: Run base M-CORD tests
   hosts: head
   become: no
+  # These variables could be elevated to the profile. Think about
+  # doing this after the E2E test framework is complete.
+  vars:
+    test_networks:
+      - management
+      - sgi_network
+      - s11_network
+      - spgw_network
+    test_services:
+      - venb
+      - vspgwc
+      - vspgwu
+    test_ports:
+      - { vm: venb, network: management }
+      - { vm: venb, network: s11_network }
+      - { vm: venb, network: sgi_network }
+      - { vm: venb, network: s1u_network }
+      - { vm: vspgwc, network: management }
+      - { vm: vspgwc, network: s11_network }
+      - { vm: vspgwc, network: spgw_network }
+      - { vm: vspgwu, network: management }
+      - { vm: vspgwu, network: s1u_network }
+      - { vm: vspgwu, network: sgi_network }
+      - { vm: vspgwu, network: spgw_network }
   roles:
-    - test-mcord-base-spirent
+    - test-mcord-base
diff --git a/profile_manifests/mcord-ng4t.yml b/profile_manifests/mcord-ng4t.yml
new file mode 100644
index 0000000..8b26db2
--- /dev/null
+++ b/profile_manifests/mcord-ng4t.yml
@@ -0,0 +1,268 @@
+---
+
+# Copyright 2017-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.
+
+# profile_manifests/mcord.yml
+# Configures an M-CORD pod
+
+# site configuration
+site_name: mysite
+site_humanname: MySite
+#site_suffix: "{{ site_name }}.opencord.org"
+site_suffix: "cord.lab"
+deployment_type: MyDeployment
+
+# Feature toggles
+use_fabric: True
+use_maas: True
+
+# XOS config
+xos_tosca_config_templates:
+  - vtn-service.yaml
+  - fabric-service.yaml
+  - management-net.yaml
+  - shared-net.yaml
+  - wan-net.yaml
+  - vsg-net.yaml
+  - xos-gui-extensions.yml
+
+xos_new_tosca_config_templates:
+  - s11-net.yaml
+  - s1u-net.yaml
+  - nbi-net.yaml
+  - sbi-net.yaml
+  - spgw-net.yaml
+  - sgi-net.yaml
+  - flat-net.yaml
+  - mcord-ng4t-services.yml
+
+xos_other_templates:
+  - fabric-network-cfg.json
+
+# GUI Config [new GUI]
+gui_project_name: "M-CORD"
+gui_background: "cord-bg.jpg" # TODO find mcord image
+
+enabled_gui_extensions: []
+
+# paths defined in manifest/default.xml
+xos_services:
+  - name: vtn
+    path: orchestration/xos_services/vtn-service
+    keypair: vsg_rsa
+  - name: openstack
+    path: orchestration/xos_services/openstack
+  - name: onos
+    path: orchestration/xos_services/onos-service
+    keypair: onos_rsa
+  - name: fabric
+    path: orchestration/xos_services/fabric
+  - name: venb
+    path: orchestration/xos_services/venb
+    keypair: mcord_rsa
+  - name: vspgwc
+    path: orchestration/xos_services/vspgwc
+    keypair: mcord_rsa
+  - name: vspgwu
+    path: orchestration/xos_services/vspgwu
+    keypair: mcord_rsa
+
+profile_library: "mcord"
+
+# VTN network configuration
+management_network_cidr: 172.27.0.0/24
+management_network_ip: 172.27.0.1/24
+data_plane_ip: 10.168.0.253/24
+
+# Juju config
+charm_versions:
+  ceilometer: "cs:trusty/ceilometer-17"
+  ceilometer-agent: "cs:trusty/ceilometer-agent-13"
+  glance: "cs:trusty/glance-28"
+  keystone: "cs:trusty/keystone-267"
+  mongodb: "cs:trusty/mongodb-33"
+  percona-cluster: "cs:trusty/percona-cluster-31"
+  nagios: "cs:trusty/nagios-10"
+  neutron-api: "cs:~cordteam/trusty/neutron-api-6"
+  nova-cloud-controller: "cs:trusty/nova-cloud-controller-64"
+  nova-compute: "cs:~cordteam/trusty/nova-compute-3"
+  nrpe: "cs:trusty/nrpe-4"
+  ntp: "cs:trusty/ntp-14"
+  openstack-dashboard: "cs:trusty/openstack-dashboard-19"
+  rabbitmq-server: "cs:trusty/rabbitmq-server-42"
+
+head_lxd_list:
+  - name: "juju-1"
+    service: "juju"
+    aliases:
+      - "juju"
+    ipv4_last_octet: 10
+
+  - name: "ceilometer-1"
+    service: "ceilometer"
+    aliases:
+      - "ceilometer"
+    ipv4_last_octet: 20
+    forwarded_ports:
+      - { ext: 8777, int: 8777 }
+
+  - name: "glance-1"
+    service: "glance"
+    aliases:
+      - "glance"
+    ipv4_last_octet: 30
+    forwarded_ports:
+      - { ext: 9292, int: 9292 }
+
+  - name: "keystone-1"
+    service: "keystone"
+    aliases:
+      - "keystone"
+    ipv4_last_octet: 40
+    forwarded_ports:
+      - { ext: 35357, int: 35357 }
+      - { ext: 4990, int: 4990 }
+      - { ext: 5000, int: 5000 }
+
+  - name: "percona-cluster-1"
+    service: "percona-cluster"
+    aliases:
+      - "percona-cluster"
+    ipv4_last_octet: 50
+
+  - name: "nagios-1"
+    service: "nagios"
+    aliases:
+      - "nagios"
+    ipv4_last_octet: 60
+    forwarded_ports:
+      - { ext: 3128, int: 80 }
+
+  - name: "neutron-api-1"
+    service: "neutron-api"
+    aliases:
+      - "neutron-api"
+    ipv4_last_octet: 70
+    forwarded_ports:
+      - { ext: 9696, int: 9696 }
+
+  - name: "nova-cloud-controller-1"
+    service: "nova-cloud-controller"
+    aliases:
+      - "nova-cloud-controller"
+    ipv4_last_octet: 80
+    forwarded_ports:
+      - { ext: 8774, int: 8774 }
+
+  - name: "openstack-dashboard-1"
+    service: "openstack-dashboard"
+    aliases:
+      - "openstack-dashboard"
+    ipv4_last_octet: 90
+    forwarded_ports:
+      - { ext: 8080, int: 80 }
+
+  - name: "rabbitmq-server-1"
+    service: "rabbitmq-server"
+    aliases:
+      - "rabbitmq-server"
+    ipv4_last_octet: 100
+
+  - name: "mongodb-1"
+    service: "mongodb"
+    aliases:
+      - "mongodb"
+    ipv4_last_octet: 110
+
+lxd_service_list:
+  - ceilometer
+  - glance
+  - keystone
+  - mongodb
+  - nagios
+  - neutron-api
+  - nova-cloud-controller
+  - openstack-dashboard
+  - percona-cluster
+  - rabbitmq-server
+
+standalone_service_list:
+  - ntp
+  - nrpe
+  - ceilometer-agent
+
+
+service_relations:
+  - name: keystone
+    relations: [ "percona-cluster", "nrpe", ]
+
+  - name: nova-cloud-controller
+    relations: [ "percona-cluster", "rabbitmq-server", "glance", "keystone", "nrpe", ]
+
+  - name: glance
+    relations: [ "percona-cluster", "keystone", "nrpe", ]
+
+  - name: neutron-api
+    relations: [ "keystone",  "percona-cluster", "rabbitmq-server", "nova-cloud-controller", "nrpe", ]
+
+  - name: openstack-dashboard
+    relations: [ "keystone", "nrpe", ]
+
+  - name: nagios
+    relations: [ "nrpe", ]
+
+  - name: "percona-cluster:juju-info"
+    relations: [ "nrpe:general-info", ]
+
+  - name: rabbitmq-server
+    relations: [ "nrpe", ]
+
+  - name: ceilometer
+    relations: [ "mongodb", "rabbitmq-server", "nagios", "nrpe", ]
+
+  - name: "ceilometer:identity-service"
+    relations: [ "keystone:identity-service", ]
+
+  - name: "ceilometer:ceilometer-service"
+    relations: [ "ceilometer-agent:ceilometer-service", ]
+
+
+compute_relations:
+  - name: nova-compute
+    relations: [ "ceilometer-agent", "glance", "nova-cloud-controller", "nagios", "nrpe", ]
+
+  - name: "nova-compute:shared-db"
+    relations: [ "percona-cluster:shared-db", ]
+
+  - name: "nova-compute:amqp"
+    relations: [ "rabbitmq-server:amqp", ]
+
+  - name: ntp
+    relations: [ "nova-compute", ]
+
+
+xos_images:
+  # trusty-server-multi-nic right now
+  - name: "image-venb"
+    url: "http://www.vicci.org/opencloud/trusty-server-cloudimg-amd64-disk1.img.20170201"
+    checksum: "sha256:ebf007ba3ec1043b7cd011fc6668e2a1d1d4c69c41071e8513ab355df7a057cb"
+
+  - name: "image-spgwc"
+    url: "http://www.vicci.org/cord/ngic-cp1-cmpress.qcow2.20171102"
+    checksum: "sha256:06d8f95ac7e5825be7b834d45aa74cbdb7453353d03ae8171f302965311f5829"
+
+  - name: "image-spgwu"
+    url: "http://www.vicci.org/cord/ngic-dp1-cmpress.qcow2.20171102"
+    checksum: "sha256:c26bfea5e3e67580cf594e6fd1bcdefa8fbfc1dae57801e250472d054e6be1a6"
\ No newline at end of file
diff --git a/roles/cord-profile/templates/mcord-ng4t-services.yml.j2 b/roles/cord-profile/templates/mcord-ng4t-services.yml.j2
new file mode 100644
index 0000000..8252ffc
--- /dev/null
+++ b/roles/cord-profile/templates/mcord-ng4t-services.yml.j2
@@ -0,0 +1,417 @@
+
+{#
+Copyright 2017-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.
+#}
+
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: created by platform-install, need to add M-CORD services later
+
+imports:
+   - custom_types/xos.yaml
+   - custom_types/slice.yaml
+   - custom_types/site.yaml
+   - custom_types/image.yaml
+   - custom_types/flavor.yaml
+   - custom_types/network.yaml
+   - custom_types/onosservice.yaml
+   - custom_types/networkslice.yaml
+   - custom_types/venbservice.yaml
+   - custom_types/venbserviceinstance.yaml
+   - custom_types/vspgwcservice.yaml
+   - custom_types/vspgwcvendor.yaml
+   - custom_types/vspgwctenant.yaml
+   - custom_types/vspgwuservice.yaml
+   - custom_types/vspgwuvendor.yaml
+   - custom_types/vspgwutenant.yaml
+
+topology_template:
+  node_templates:
+
+# site, image, fully created in deployment.yaml
+    {{ site_name }}:
+      type: tosca.nodes.Site
+      properties:
+        must-exist: true
+        name: {{ site_name }}
+
+    m1.small:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.small
+        must-exist: true
+    m1.large:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.large
+        must-exist: true
+    m1.medium:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.medium
+        must-exist: true
+    m1.xlarge:
+      type: tosca.nodes.Flavor
+      properties:
+        name: m1.xlarge
+        must-exist: true
+
+    image-venb:
+      type: tosca.nodes.Image
+      properties:
+        name: image-venb
+
+    image-spgwc:
+      type: tosca.nodes.Image
+      properties:
+        name: image-spgwc
+
+    image-spgwu:
+      type: tosca.nodes.Image
+      properties:
+        name: image-spgwu
+
+# management networks, fully created in management-net.yaml
+    management:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: management
+
+{% if use_management_hosts %}
+    management_hosts:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: management_hosts
+{% endif %}
+
+# s1u_network is for connectivity between VMs, fully created in s1u-net.yaml
+    s1u_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: s1u_network
+# s11_network is for connectivity between VMs, fully created in s11-net.yaml
+    s11_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: s11_network
+# nbi_network is for connectivity between VMs, fully created in nbi-net.yaml
+    nbi_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: nbi_network
+# sbi_network is for connectivity between VMs, fully created in sbi-net.yaml
+    sbi_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: sbi_network
+# sgi_network is for connectivity between VMs, fully created in sgi-net.yaml
+    sgi_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: sgi_network
+# spgw_network is for connectivity between VMs, fully created in spgw-net.yaml
+    spgw_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: spgw_network
+# flat_network is for connectivity between VM inside cord and server outside, fully created in flat-net.yaml
+    flat_network:
+      type: tosca.nodes.Network
+      properties:
+        must-exist: true
+        name: flat_network
+
+# ONOS_CORD, fully created in vtn.yaml
+    service#ONOS_CORD:
+      type: tosca.nodes.ONOSService
+      properties:
+        must-exist: true
+        name: ONOS_CORD
+
+# ONOS_Fabric, fully created in fabric.yaml
+    service#ONOS_Fabric:
+      type: tosca.nodes.ONOSService
+      properties:
+        must-exist: true
+        name: ONOS_Fabric
+
+# vENB Service
+    service#venb:
+      type: tosca.nodes.VENBService
+      properties:
+          name: venb
+          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
+          private_key_fn: /opt/xos/services/venb/keys/mcord_rsa
+      artifacts:
+          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub
+
+    {{ site_name }}_venb:
+      description: vENB Service Slice
+      type: tosca.nodes.Slice
+      properties:
+          name: {{ site_name }}_venb
+          default_isolation: vm
+          network: noauto
+      requirements:
+          - site:
+              node: mysite
+              relationship: tosca.relationships.BelongsToOne
+          - service:
+              node: service#venb
+              relationship: tosca.relationships.BelongsToOne
+          - default_image:
+              node: image-venb
+              relationship: tosca.relationships.BelongsToOne
+          - default_flavor:
+              node: m1.xlarge
+              relationship: tosca.relationships.BelongsToOne
+
+    venb_instance1:
+      type: tosca.nodes.VENBServiceInstance
+      properties:
+        name: venb_instance1
+      requirements:
+        - owner:
+            node: service#venb
+            relationship: tosca.relationships.BelongsToOne
+
+    venb_slice_management_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: management
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_venb
+            relationship: tosca.relationships.BelongsToOne
+
+    venb_slice_s11_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: s11_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_venb
+            relationship: tosca.relationships.BelongsToOne
+
+    venb_slice_s1u_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: s1u_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_venb
+            relationship: tosca.relationships.BelongsToOne
+
+    venb_slice_sgi_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: sgi_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_venb
+            relationship: tosca.relationships.BelongsToOne
+
+#vSPGWC Service
+    service#vspgwc:
+      type: tosca.nodes.VSPGWCService
+      properties:
+          name: vspgwc
+          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
+          private_key_fn: /opt/xos/services/vspgwc/keys/mcord_rsa
+      artifacts:
+          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub
+
+    {{ site_name }}_vspgwc:
+      description: SDN controller slice
+      type: tosca.nodes.Slice
+      properties:
+          name: {{ site_name }}_vspgwc
+          default_isolation: vm
+          network: noauto
+      requirements:
+          - site:
+              node: mysite
+              relationship: tosca.relationships.BelongsToOne
+          - service:
+              node: service#vspgwc
+              relationship: tosca.relationships.BelongsToOne
+          - default_image:
+              node: image-spgwc
+              relationship: tosca.relationships.BelongsToOne
+          - default_flavor:
+              node: m1.large
+              relationship: tosca.relationships.BelongsToOne
+
+    intel_vspgwc:
+      type: tosca.nodes.VSPGWCVendor
+      properties:
+        name: intel_vspgwc
+      requirements:
+        - image:
+            node: image-spgwc
+            relationship: tosca.relationships.BelongsToOne
+        - flavor:
+            node: m1.large
+            relationship: tosca.relationships.BelongsToOne
+
+    serviceinstance#vspgwc_instance:
+      type: tosca.nodes.VSPGWCTenant
+      properties:
+          name: vspgwc_instance1
+      requirements:
+        - vspgwc_vendor:
+            node: intel_vspgwc
+            relationship: tosca.relationships.BelongsToOne
+        - owner:
+            node: service#vspgwc
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwc_slice_management_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: management
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwc
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwc_slice_s11_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: s11_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwc
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwc_slice_spgw_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: spgw_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwc
+            relationship: tosca.relationships.BelongsToOne
+
+#vSPGWU Service
+    service#vspgwu:
+      type: tosca.nodes.VSPGWUService
+      properties:
+          name: vspgwu
+          public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
+          private_key_fn: /opt/xos/services/vspgwu/keys/mcord_rsa
+      artifacts:
+          pubkey: /opt/cord_profile/key_import/mcord_rsa.pub
+
+    {{ site_name }}_vspgwu:
+      description: SDN controller slice
+      type: tosca.nodes.Slice
+      properties:
+          name: {{ site_name }}_vspgwu
+          default_isolation: vm
+          network: noauto
+      requirements:
+          - site:
+              node: mysite
+              relationship: tosca.relationships.BelongsToOne
+          - service:
+              node: service#vspgwu
+              relationship: tosca.relationships.BelongsToOne
+          - default_image:
+              node: image-spgwu
+              relationship: tosca.relationships.BelongsToOne
+          - default_flavor:
+              node: m1.xlarge
+              relationship: tosca.relationships.BelongsToOne
+
+    intel_vspgwu:
+      type: tosca.nodes.VSPGWUVendor
+      properties:
+        name: intel_vspgwu
+      requirements:
+        - image:
+            node: image-spgwu
+            relationship: tosca.relationships.BelongsToOne
+        - flavor:
+            node: m1.xlarge
+            relationship: tosca.relationships.BelongsToOne
+
+    serviceinstance#vspgwu_instance:
+      type: tosca.nodes.VSPGWUTenant
+      properties:
+          name: vspgwu_instance1
+      requirements:
+        - vspgwu_vendor:
+            node: intel_vspgwu
+            relationship: tosca.relationships.BelongsToOne
+        - owner:
+            node: service#vspgwu
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwu_slice_management_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: management
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwu
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwu_slice_sgi_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: sgi_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwu
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwu_slice_spgw_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: spgw_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwu
+            relationship: tosca.relationships.BelongsToOne
+
+    vspgwu_slice_s1u_network:
+      type: tosca.nodes.NetworkSlice
+      requirements:
+        - network:
+            node: s1u_network
+            relationship: tosca.relationships.BelongsToOne
+        - slice:
+            node: {{ site_name }}_vspgwu
+            relationship: tosca.relationships.BelongsToOne
diff --git a/roles/test-mcord-base-spirent/defaults/main.yml b/roles/test-mcord-base-spirent/defaults/main.yml
deleted file mode 100644
index c6392b3..0000000
--- a/roles/test-mcord-base-spirent/defaults/main.yml
+++ /dev/null
@@ -1,55 +0,0 @@
----
-# Copyright 2017-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.
-
-# test-mcord-base/defaults/main.yml
-
-head_cord_profile_dir: "/opt/cord_profile"
-
-xos_ui_port: 9000
-
-xos_admin_user: "xosadmin@opencord.org"
-maas_xos_admin_pass: "{{ lookup('file', '/opt/credentials/xosadmin@opencord.org') }}"
-
-test_networks:
-  - management
-  - sgi_network
-  - s11_network
-  - spgw_network
-#  - sbi_network
-#  - nbi_network
-
-test_services:
-  - venb
-  - vspgwc
-#  - sdncontroller
-  - vspgwu
-
-test_ports:
-  - { vm: venb, network: management }
-  - { vm: venb, network: s11_network }
-  - { vm: venb, network: sgi_network }
-  - { vm: venb, network: s1u_network }
-  - { vm: vspgwc, network: management }
-  - { vm: vspgwc, network: s11_network }
-  - { vm: vspgwc, network: spgw_network }
-#  - { vm: vspgwc, network: nbi_network }
-#  - { vm: sdncontroller, network: management }
-#  - { vm: sdncontroller, network: nbi_network }
-#  - { vm: sdncontroller, network: sbi_network }
-  - { vm: vspgwu, network: management }
-  - { vm: vspgwu, network: s1u_network }
-  - { vm: vspgwu, network: sgi_network }
-  - { vm: vspgwu, network: spgw_network }
-#  - { vm: vspgwu, network: sbi_network }
diff --git a/roles/test-mcord-base-spirent/tasks/main.yml b/roles/test-mcord-base-spirent/tasks/main.yml
deleted file mode 100644
index 2cfd0e3..0000000
--- a/roles/test-mcord-base-spirent/tasks/main.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-# Copyright 2017-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.
-
-
----
-# test-mcord-base/tasks/main.yml
-# Run tests to check that the base elements of M-CORD are present
-
-- name: Wait for networks to be synchronized
-  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; neutron net-list|grep '{{ item }}' > /dev/null"
-  register: result
-  until: result | success
-  retries: 10
-  delay: 60
-  with_items: "{{ test_networks }}"
-  tags:
-    - skip_ansible_lint # running a sub job
-
-- name: Wait for VMs to come up
-  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep '{{ item }}.*ACTIVE' > /dev/null"
-  register: result
-  until: result | success
-  retries: 10
-  delay: 60
-  with_items: "{{ test_services }}"
-  tags:
-    - skip_ansible_lint # running a sub job
-
-- name: Verify that VMs are properly networked
-  shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep '{{ item.vm }}.*ACTIVE.*{{ item.network }}' > /dev/null"
-  with_items: "{{ test_ports }}"
-  tags:
-    - skip_ansible_lint # running a sub job
\ No newline at end of file