tosca_definitions_version:      tosca_simple_profile_for_nfv_1_0_0
#tosca_default_namespace :    # Optional. default namespace (schema, types version)

description: Define RIFT.io custom types

data_types:
  tosca.datatypes.network.riftio.vnf_configuration:
    properties:
      config_type:
        type: string
      config_delay:
        type: integer
        default: 0
        required: no
        constraints:
          - greater_or_equal: 0
      config_priority:
        type: integer
        constraints:
          - greater_than: 0
      config_details:
        type: map
      config_template:
        type: string
        required: no

capability_types:
  tosca.capabilities.riftio.http_endpoint_type:
    derived_from: tosca.capabilities.Endpoint
    properties:
      polling_interval:
        type: integer
        #type: scalar_unit.time
      path:
        type: string

  tosca.capabilities.riftio.mgmt_interface_type:
    derived_from: tosca.capabilities.Endpoint
    properties:
      dashboard_params:
        type: map

  tosca.capabilities.riftio.monitoring_param:
    derived_from: tosca.capabilities.nfv.Metric
    properties:
      id:
        type: integer
      name:
        type: string
      value_type:
        type: string
        default: INT
      group_tag:
        type: string
        default: Group1
      units:
        type: string
      description:
        type: string
      json_query_method:
        type: string
        default: NAMEKEY
      http_endpoint_ref:
        type: string
      widget_type:
        type: string
        default: COUNTER

node_types:
  tosca.nodes.riftio.VNF1:
    derived_from: tosca.nodes.nfv.VNF
    properties:
      #vdu_ref:
      #  type: list
      #  description: VDUs this VNF references
      vnf_configuration:
        type: tosca.datatypes.network.riftio.vnf_configuration
      port:
        type: integer
        constraints:
          - in_range: [1, 65535]
    capabilities:
      mgmt_interface:
        type: tosca.capabilities.riftio.mgmt_interface_type
      http_endpoint:
        type: tosca.capabilities.riftio.http_endpoint_type
      # Have not figured out how to do a list for capabilities
      # If you specify multiple cpabilites of same type the
      # last one is only available in parser
      monitoring_param_0:
        type: tosca.capabilities.riftio.monitoring_param
      monitoring_param_1:
        type: tosca.capabilities.riftio.monitoring_param
    requirements:
      - vdus:
          type: tosca.capabilities.nfv.VirtualLinkable
          relationship: tosca.relationships.nfv.VirtualLinksTo
          node: tosca.nodes.riftio.VDU1
          occurrences: [ 1, UNBOUND ]

  tosca.nodes.riftio.VDU1:
    derived_from: tosca.nodes.nfv.VDU
    properties:
      count:
        type: integer
        default: 1
      cloud_init :
        type: string
        default: "#cloud-config\npassword: fedora\nchpasswd: { expire: False }\nssh_pwauth: True\nruncmd:\n  - [ systemctl, daemon-reload ]\n  - [ ifup, eth1 ]\n"
    capabilities:
      virtual_linkable:
        type: tosca.capabilities.nfv.VirtualLinkable

  tosca.nodes.riftio.CP1:
    derived_from: tosca.nodes.nfv.CP
    properties:
      name:
        type: string
        description: Name of the connection point
      cp_type:
        type: string
        description: Type of connection point
      vdu_intf_name:
        type: string
        description: Name of interface on VDU
      vdu_intf_type:
        type: string
        description: Type of interface on VDU

  tosca.nodes.riftio.VL1:
    derived_from: tosca.nodes.nfv.VL.ELAN
    properties:
      description:
        type: string

group_types:
  tosca.groups.riftio.ConfigPrimitives:
    derived_from: tosca.groups.Root
    properties:
      primitive:
        type: map

policy_types:
  tosca.policies.riftio.ScalingGroup:
    derived_from: tosca.policies.Root
    properties:
      name:
        type: string
      max_instance_count:
        type: integer
      min_instance_count:
        type: integer
      vnfd_members:
        type: map
      config_actions:
        type: map
