WIP Adding vEE, vNodlocal, vNodglobal tenants to ecord

Change-Id: I78d356cf346eac5f42d6c2a1f6f289ee7948cc11
diff --git a/roles/cord-profile/templates/ecord-services.yaml.j2 b/roles/cord-profile/templates/ecord-services.yaml.j2
index e8b69a0..dc6a71f 100644
--- a/roles/cord-profile/templates/ecord-services.yaml.j2
+++ b/roles/cord-profile/templates/ecord-services.yaml.j2
@@ -5,6 +5,7 @@
 imports:
    - custom_types/xos.yaml
    - custom_types/veg.yaml
+   - custom_types/vnodlocal.yaml
 
 topology_template:
   node_templates:
@@ -116,6 +117,11 @@
         translation: none
         vtn_kind: VEG
 
+    service#vnodlocal:
+      type: tosca.nodes.VNodLocalService
+      properties:
+      requirements:
+
     # Networks required by the CORD setup
     {{ site_name }}_veg-access:
       type: tosca.nodes.network.Network
diff --git a/roles/cord-profile/templates/vee-service.yaml.j2 b/roles/cord-profile/templates/vee-service.yaml.j2
new file mode 100644
index 0000000..56a7de4
--- /dev/null
+++ b/roles/cord-profile/templates/vee-service.yaml.j2
@@ -0,0 +1,69 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+   - custom_types/xos.yaml
+   - custom_types/vee.yaml
+   - custom_types/veg.yaml
+   - custom_types/vnodlocal.yaml
+
+description: vee services, generated by platform-install
+
+topology_template:
+  node_templates:
+
+    service#ONOS_Fabric:
+      type: tosca.nodes.ONOSService
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+
+    service#veg:
+      type: tosca.nodes.VEGService
+      requirements:
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+      artifacts:
+        pubkey: /opt/xos/services/veg/keys/veg_rsa.pub
+
+    service#vnodlocal:
+      type: tosca.nodes.VNodLocalService
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+      requirements:
+
+    service#vee:
+      type: tosca.nodes.VEEService
+      requirements:
+          - veg_tenant:
+              node: service#veg
+              relationship: tosca.relationships.TenantOfService
+          - vnodlocal_tenant:
+              node: service#vnodlocal
+              relationship: tosca.relationships.TenantOfService
+      properties:
+        view_url: /admin/vEE/veeservice/$id$/
+
+    template#vee:
+      type: tosca.nodes.NetworkTemplate
+      properties:
+        visibility: private
+        translation: none
+        vtn_kind: vee
+
+    CarrierEthernet_ONOS_app:
+      type: tosca.nodes.ONOSApp
+      requirements:
+        - onos_tenant:
+            node: service#ONOS_Fabric
+            relationship: tosca.relationships.TenantOfService
+        - vee_service:
+            node: service#vee
+            relationship: tosca.relationships.UsedByService
+      properties:
+        dependencies: org.onosproject.drivers, org.onosproject.openflow-base, org.onosproject.ecord.carrierethernet
+
diff --git a/roles/cord-profile/templates/vnodglobal-service.yaml.j2 b/roles/cord-profile/templates/vnodglobal-service.yaml.j2
new file mode 100644
index 0000000..51835b0
--- /dev/null
+++ b/roles/cord-profile/templates/vnodglobal-service.yaml.j2
@@ -0,0 +1,28 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+   - custom_types/xos.yaml
+   - custom_types/metronet.yaml
+
+description: vnodglobal services, generated by platform-install
+
+topology_template:
+    node_templates:
+
+      bandwidthprofile#ecordbandwidthprofile:
+        type: tosca.nodes.EcordBandwidthProfile
+        requirements:
+        properties:
+          bwpcfgcbs: 100
+          bwpcfgebs: 50
+          bwpcfgcir: 600
+          bwpcfgeir: 50
+          name: ecordbandwidthprofile
+
+      service#vnodglobal:
+        type: tosca.nodes.VNodGlobalService
+        requirements:
+          - bandwith_profile:
+              node: bandwidthprofile#ecordbandwidthprofile
+              relationship: tosca.relationships.UsesBandwidthProfile
+        properties:
\ No newline at end of file
diff --git a/roles/test-ecord-subscriber-config/defaults/main.yml b/roles/test-ecord-subscriber-config/defaults/main.yml
new file mode 100644
index 0000000..3fbf456
--- /dev/null
+++ b/roles/test-ecord-subscriber-config/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+# test-subscriber-config/defaults/main.yml
+
+cord_profile_dir: "{{ ansible_user_dir + '/cord_profile' }}"
+
diff --git a/roles/test-ecord-subscriber-config/tasks/main.yml b/roles/test-ecord-subscriber-config/tasks/main.yml
new file mode 100644
index 0000000..16a343d
--- /dev/null
+++ b/roles/test-ecord-subscriber-config/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+# test-subscriber/tasks/main.yml
+
+- name: Create test-ecord-subscriber.yaml TOSCA config
+  template:
+    src: test-ecord-subscriber.yaml.j2
+    dest: "{{ cord_profile_dir }}/test-ecord-subscriber.yaml"
+    owner: "{{ ansible_user_id }}"
+    mode: 0644
+
diff --git a/roles/test-ecord-subscriber-config/templates/test-ecord-subscriber.yaml.j2 b/roles/test-ecord-subscriber-config/templates/test-ecord-subscriber.yaml.j2
new file mode 100644
index 0000000..17afe94
--- /dev/null
+++ b/roles/test-ecord-subscriber-config/templates/test-ecord-subscriber.yaml.j2
@@ -0,0 +1,114 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Creates a CORD test subscriber, created by platform-install
+
+imports:
+   - custom_types/xos.yaml
+   - custom_types/vee.yaml
+   - custom_types/veg.yaml
+   - custom_types/vnodlocal.yaml
+
+topology_template:
+  node_templates:
+
+# site, fully created in deployment.yaml
+    {{ site_name }}:
+      type: tosca.nodes.Site
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+# vsg slice, volt service, fully created in cord-services.yaml
+    {{ site_name }}_veg:
+      type: tosca.nodes.Slice
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+
+    service#vee:
+      type: tosca.nodes.VEEService
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+
+    service#vrouter:
+      type: tosca.nodes.VRouterService
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+
+    service#veg:
+      type: tosca.nodes.VEGService
+      requirements:
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+
+    service#vnodlocal:
+      type: tosca.nodes.VNodLocalService
+      properties:
+        no-delete: true
+        no-create: true
+        no-update: true
+      requirements:
+
+# Test subscriber
+
+    # Let's add a user who can be administrator of the household
+    johndoe@myhouse.com:
+      type: tosca.nodes.User
+      properties:
+        password: letmein
+        firstname: john
+        lastname: doe
+      requirements:
+        - site:
+            node: {{ site_name }}
+            relationship: tosca.relationships.MemberOfSite
+        - dependency:
+            node: {{ site_name }}_veg
+            relationship: tosca.relationships.DependsOn
+
+    # A subscriber
+    My Enterprise:
+      type: tosca.nodes.Subscriber
+      properties:
+      requirements:
+
+    My vEG:
+      type: tosca.nodes.Tenant
+      properties:
+        service_specific_id: 123
+      requirements:
+        - provider_service:
+            node: service#vrouter
+            relationship: tosca.relationships.MemberOfService
+        - subscriber_tenant:
+            node: service#vrouter
+            relationship: tosca.relationships.BelongsToTenant
+
+    My vEE:
+      type: tosca.nodes.Tenant
+      properties:
+        service_specific_id: 123
+      requirements:
+        - provider_service:
+            node: service#veg
+            relationship: tosca.relationships.MemberOfService
+            node: service#vnodlocal
+            relationship: tosca.relationships.MemberOfService
+        - subscriber_tenant:
+            node: service#vee
+            relationship: tosca.relationships.BelongsToTenant
+            node: service#vnodlocal
+            relationship: tosca.relationships.BelongsToTenant
+        - subscriber:
+            node: My Enterprise
+            relationship: tosca.relationships.BelongsToSubscriber
+        - dependency:
+            node: {{ site_name }}_veg
+            relationship: tosca.relationships.DependsOn
diff --git a/roles/test-ecord-subscriber-enable/tasks/main.yml b/roles/test-ecord-subscriber-enable/tasks/main.yml
new file mode 100644
index 0000000..0337c0b
--- /dev/null
+++ b/roles/test-ecord-subscriber-enable/tasks/main.yml
@@ -0,0 +1,8 @@
+---
+# test-ecord-subscriber-enable/tasks/main.yml
+
+- name: Run TOSCA to add test-ecord-subscriber
+  command: "python /opt/xos/tosca/run.py {{ xos_admin_user }} /opt/cord_profile/test-ecord-subscriber.yaml"
+  tags:
+    - skip_ansible_lint # TOSCA loading should be idempotent
+