tosca_definitions_version: tosca_simple_yaml_1_0

description: Just enough Tosca to get the vSG slice running on the CORD POD

imports:
   - custom_types/xos.yaml

topology_template:
  node_templates:
    # CORD Services
    service_volt:
      type: tosca.nodes.Service
      requirements:
          - vsg_tenant:
              node: service_vsg
              relationship: tosca.relationships.TenantOfService
      properties:
          view_url: /admin/cord/voltservice/$id$/
          kind: vOLT

    public_addresses:
      type: tosca.nodes.AddressPool
      properties:
          addresses: 10.168.0.0/24

    service_vsg:
      type: tosca.nodes.VSGService
      requirements:
          - vbng_tenant:
              node: service_vbng
              relationship: tosca.relationships.TenantOfService
      properties:
          view_url: /admin/cord/vsgservice/$id$/
          backend_network_label: hpc_client
          public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
          private_key_fn: /opt/xos/synchronizers/vcpe/vcpe_private_key
          wan_container_gateway_ip: 10.168.0.1
          wan_container_gateway_mac: 02:42:0a:a8:00:01
          wan_container_netbits: 24
#          node_label: label_vsg
      artifacts:
          pubkey: /opt/xos/synchronizers/vcpe/vcpe_public_key

    service_vbng:
      type: tosca.nodes.VBNGService
      properties:
          view_url: /admin/cord/vbngservice/$id$/
# if unspecified, vbng observer will look for an ONOSApp Tenant and
# generate a URL from its IP address
#          vbng_url: http://10.11.10.24:8181/onos/virtualbng/

    Private:
      type: tosca.nodes.NetworkTemplate

    management:
      type: tosca.nodes.network.Network.XOS
      properties:
          no-create: true
          no-delete: true
          no-update: true

    mysite:
      type: tosca.nodes.Site

    label_vsg:
      type: tosca.nodes.NodeLabel

    # Networks required by the CORD setup
    mysite_vsg-access:
      type: tosca.nodes.network.Network
      properties:
          ip_version: 4
      requirements:
          - network_template:
              node: Private
              relationship: tosca.relationships.UsesNetworkTemplate
          - owner:
              node: mysite_vsg
              relationship: tosca.relationships.MemberOfSlice
          - connection:
              node: mysite_vsg
              relationship: tosca.relationships.ConnectsToSlice

    # CORD Slices
    mysite_vsg:
      description: vSG Controller Slice
      type: tosca.nodes.Slice
      properties:
          network: noauto
      requirements:
          - vsg_service:
              node: service_vsg
              relationship: tosca.relationships.MemberOfService
          - site:
              node: mysite
              relationship: tosca.relationships.MemberOfSite
          - management:
              node: management
              relationship: tosca.relationships.ConnectsToNetwork

    # 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: mysite
              relationship: tosca.relationships.MemberOfSite

    # A subscriber
    My House:
       type: tosca.nodes.CORDSubscriber
       properties:
           service_specific_id: 123
           firewall_enable: false
           cdn_enable: false
           url_filter_enable: false
           url_filter_level: R
       requirements:
          - house_admin:
              node: johndoe@myhouse.com
              relationship: tosca.relationships.AdminPrivilege

    Mom's PC:
       type: tosca.nodes.CORDUser
       properties:
           mac: 01:02:03:04:05:06
           level: PG_13
       requirements:
           - household:
               node: My House
               relationship: tosca.relationships.SubscriberDevice

    Dad's PC:
       type: tosca.nodes.CORDUser
       properties:
           mac: 90:E2:BA:82:F9:75
           level: PG_13
       requirements:
           - household:
               node: My House
               relationship: tosca.relationships.SubscriberDevice

    Jack's Laptop:
       type: tosca.nodes.CORDUser
       properties:
           mac: 68:5B:35:9D:91:D5
           level: PG_13
       requirements:
           - household:
               node: My House
               relationship: tosca.relationships.SubscriberDevice

    Jill's Laptop:
       type: tosca.nodes.CORDUser
       properties:
           mac: 34:36:3B:C9:B6:A6
           level: PG_13
       requirements:
           - household:
               node: My House
               relationship: tosca.relationships.SubscriberDevice

    My Volt:
        type: tosca.nodes.VOLTTenant
        properties:
            service_specific_id: 123
            s_tag: 222
            c_tag: 111
        requirements:
            - provider_service:
                node: service_volt
                relationship: tosca.relationships.MemberOfService
            - subscriber:
                node: My House
                relationship: tosca.relationships.BelongsToSubscriber
