tosca_definitions_version: tosca_simple_profile_for_nfv_1_0
description: Toy NS
data_types:
  tosca.datatypes.nfv.riftio.dashboard_params:
    properties:
      path:
        type: string
        description: >-
          The HTTP path for the dashboard
      port:
        type: tosca.datatypes.network.PortDef
        description: >-
          The HTTP port for the dashboard
        default: 80
      https:
        type: boolean
        description: >-
          Pick HTTPS instead of HTTP , Default is false
        default: false
        required: false
  tosca.datatypes.nfv.riftio.monitoring_param_ui:
    properties:
      description:
        type: string
        required: false
      group_tag:
        type: string
        description: >-
          A simple tag to group monitoring parameters
        required: false
      widget_type:
        type: string
        description: >-
          Type of the widget
        default: counter
        constraints:
          - valid_values:
              - histogram
              - bar
              - gauge
              - slider
              - counter
              - textbox
      units:
        type: string
        required: false
  tosca.datatypes.nfv.riftio.monitoring_param_value:
    properties:
      value_type:
        type: string
        default: integer
        constraints:
          - valid_values:
              - integer
              - float
              - string
      numeric_min:
        type: integer
        description: >-
          Minimum value for the parameter
        required: false
      numeric_max:
        type: integer
        description: >-
          Maxium value for the parameter
        required: false
      string_min:
        type: integer
        description: >-
          Minimum string length for the parameter
        required: false
        constraints:
          - greater_or_equal: 0
      string_max:
        type: integer
        description: >-
          Maximum string length for the parameter
        required: false
        constraints:
          - greater_or_equal: 0
  tosca.datatypes.compute.Container.Architecture.CPUAllocation:
    derived_from: tosca.datatypes.Root
    properties:
      cpu_affinity:
        type: string
        required: false
        constraints:
          - valid_values: [shared, dedicated, any]
      thread_allocation:
        type: string
        required: false
        constraints:
          - valid_values: [avoid, separate, isolate, prefer]
      socket_count:
        type: integer
        required: false
      core_count:
        type: integer
        required: false
      thread_count:
        type: integer
        required: false

  tosca.datatypes.compute.Container.Architecture.NUMA:
    derived_from: tosca.datatypes.Root
    properties:
      id:
        type: integer
        constraints:
          - greater_or_equal: 0
      vcpus:
        type: list
        entry_schema:
          type: integer
          constraints:
            -  greater_or_equal: 0
      mem_size:
        type: scalar-unit.size
        constraints:
          - greater_or_equal: 0 MB
  tosca.datatypes.nfv.riftio.paired_thread_map:
    properties:
      thread_a:
        type: integer
        required: true
        constraints:
          - greater_or_equal: 0
      thread_b:
        type: integer
        required: true
        constraints:
          - greater_or_equal: 0

  tosca.datatypes.nfv.riftio.paired_threads:
    properties:
      num_paired_threads:
        type: integer
        constraints:
          - greater_or_equal: 1
      paired_thread_ids:
        type: list
        entry_schema:
          type: tosca.datatypes.nfv.riftio.paired_thread_map
        constraints:
          - max_length: 16
        required: false

  tosca.datatypes.compute.riftio.numa:
    properties:
      id:
        type: integer
        constraints:
          - greater_or_equal: 0
      vcpus:
        type: list
        entry_schema:
          type: integer
          constraints:
            -  greater_or_equal: 0
        required: false
      mem_size:
        type: scalar-unit.size
        constraints:
          - greater_or_equal: 0 MB
        required: false
      om_numa_type:
        type: string
        description: Openmano Numa type selection
        constraints:
          - valid_values: [cores, paired-threads, threads]
        required: false
      num_cores:
        type: integer
        description: Use when om_numa_type is cores
        constraints:
          - greater_or_equal: 1
        required: false
      paired_threads:
        type: tosca.datatypes.nfv.riftio.paired_threads
        description: Use when om_numa_type is paired-threads
        required: false
      num_threads:
        type: integer
        description: Use when om_numa_type is threads
        constraints:
          - greater_or_equal: 1
        required: false
  
  tosca.nfv.datatypes.pathType:
    properties:
      forwarder:
        type: string
        required: true
      capability:
        type: string
        required: true

  tosca.nfv.datatypes.aclType:
    properties:
      eth_type:
        type: string
        required: false
      eth_src:
        type: string
        required: false
      eth_dst:
        type: string
        required: false
      vlan_id:
        type: integer
        constraints:
          - in_range: [ 1, 4094 ]
        required: false
      vlan_pcp:
        type: integer
        constraints:
          - in_range: [ 0, 7 ]
        required: false
      mpls_label:
        type: integer
        constraints:
          - in_range: [ 16, 1048575]
        required: false
      mpls_tc:
        type: integer
        constraints:
          - in_range: [ 0, 7 ]
        required: false
      ip_dscp:
        type: integer
        constraints:
          - in_range: [ 0, 63 ]
        required: false
      ip_ecn:
        type: integer
        constraints:
          - in_range: [ 0, 3 ]
        required: false
      ip_src_prefix:
        type: string
        required: false
      ip_dst_prefix:
        type: string
        required: false
      ip_proto:
        type: integer
        constraints:
          - in_range: [ 1, 254 ]
        required: false
      destination_port_range:
        type: string
        required: false
      source_port_range:
        type: string
        required: false
      network_src_port_id:
        type: string
        required: false
      network_dst_port_id:
        type: string
        required: false
      network_id:
        type: string
        required: false
      network_name:
        type: string
        required: false
      tenant_id:
        type: string
        required: false
      icmpv4_type:
        type: integer
        constraints:
          - in_range: [ 0, 254 ]
        required: false
      icmpv4_code:
        type: integer
        constraints:
          - in_range: [ 0, 15 ]
        required: false
      arp_op:
        type: integer
        constraints:
          - in_range: [ 1, 25 ]
        required: false
      arp_spa:
        type: string
        required: false
      arp_tpa:
        type: string
        required: false
      arp_sha:
        type: string
        required: false
      arp_tha:
        type: string
        required: false
      ipv6_src:
        type: string
        required: false
      ipv6_dst:
        type: string
        required: false
      ipv6_flabel:
        type: integer
        constraints:
          - in_range: [ 0, 1048575]
        required: false
      icmpv6_type:
        type: integer
        constraints:
          - in_range: [ 0, 255]
        required: false
      icmpv6_code:
        type: integer
        constraints:
          - in_range: [ 0, 7]
        required: false
      ipv6_nd_target:
        type: string
        required: false
      ipv6_nd_sll:
        type: string
        required: false
      ipv6_nd_tll:
        type: string
        required: false

  
  tosca.datatypes.nfv.riftio.vnf_configuration:
    properties:
      config_type:
        type: string
        description: >-
          Type of the configuration agent to use
        constraints:
          - valid_values: [script, netconf, rest, juju]
      config_details:
        type: map
        description: >-
          Specify the details for the config agent, like
          script type, juju charm to use, etc.
      config_template:
        required: false
        type: string
      config_delay:
        type: integer
        constraints:
        - greater_or_equal: 0
        default: 0
        required: false
      config_priority:
        type: integer
        constraints:
        - greater_than: 0

  tosca.datatypes.nfv.riftio.parameter_value:
    properties:
      name:
        type: string
        description: Name of the parameter
      value:
        type: string
        description: Value of the parameter

  tosca.datatypes.nfv.riftio.config_primitive:
    properties:
      name:
        type: string
      seq:
        type: integer
        description: >-
          Order in which to apply, when multiple ones are defined
        default: 0
        constraints:
          - greater_or_equal: 0
      parameter:
        type: list
        entry_schema:
          type: tosca.datatypes.nfv.riftio.parameter_value
      user_defined_script:
        type: string
  tosca.datatypes.nfv.riftio.primitive_parameter:
    properties:
      data_type:
        type: string
        description: >-
          Data type associated with the name
        constraints:
          - valid_values: [string, integer, boolean]
      mandatory:
        type: boolean
        description: >-
          If this field is mandatory
        default: false
        required: false
      default_value:
        type: string
        description: >-
          The default value for this field
        required: false
      parameter_pool:
        type: string
        description: >-
          Parameter pool name to use for this parameter
        required: false
      read_only:
        type: boolean
        description: >-
          The value should be greyed out by the UI.
          Only applies to parameters with default values.
        required: false
        default: false
      hidden:
        type: boolean
        description: >-
          The field should be hidden by the UI.
          Only applies to parameters with default values.
        required: false
        default: false
  tosca.datatypes.nfv.riftio.primitive_parameter_group:
    properties:
      name:
        type: string
        description: >-
          Name of the parameter group
      mandatory:
        type: boolean
        description: >-
          If this group is mandatory
        default: false
        required: false
      parameter:
        type: map
        description: >-
          List of parameters for the service primitive
        entry_schema: osca.datatypes.riftio.primitive_parameter

  tosca.datatypes.nfv.riftio.vnf_primitive_group:
    properties:
      vnf_name:
        type: string
        description: >-
          Name of the VNF in the NS
      primitive:
        type: map
        entry_schema:
          type: string
        description: >-
          Index and name of the primitive


capability_types:
  tosca.capabilities.nfv.riftio.mgmt_interface:
    derived_from: tosca.capabilities.Endpoint
    properties:
      static_ip:
        type: string
        required: false
        description: >-
          Specifies the static IP address for managing the VNF
      connection_point:
        type: string
        required: false
        description: >-
          Use the ip address associated with this connection point
      dashboard_params:
        type: tosca.datatypes.nfv.riftio.dashboard_params
        required: false
        description: >-
          Parameters for the VNF dashboard
  tosca.capabilities.nfv.riftio.monitoring_param:
    derived_from: tosca.capabilities.nfv.Metric
    properties:
      name:
        type: string
        required: false
      description:
        type: string
        required: false
      protocol:
        type: string
        default: http
        constraints:
          - equal: http
      polling_interval:
        type: scalar-unit.time
        description: >-
          The HTTP polling interval in seconds
        default: 2 s
      username:
        type: string
        description: >-
          The HTTP basic auth username
        required: false
      password:
        type: string
        description: >-
          The HTTP basic auth password
        required: false
      method:
        type: string
        description: >-
          This is the method to be performed at the uri.
          GET by default for action
        default: get
        constraints:
          - valid_values: [post, put, get, delete, options, patch]
      headers:
        type: map
        entry_schema:
          type: string
        description: >-
          Custom HTTP headers to put on HTTP request
        required: false
      json_query_method:
        type: string
        description: >-
          The method to extract a value from a JSON response
            namekey    - Use the name as the key for a non-nested value.
            jsonpath   - Use jsonpath-rw implemenation to extract a value.
            objectpath - Use objectpath implemenation to extract a value.
        constraints:
          - valid_values: [namekey, jsonpath, objectpath]
        default: namekey
      json_query_path:
        type: string
        description: >-
          The json path to use to extract value from JSON structure
        required: false
      json_object_path:
        type: string
        description: >-
          The object path to use to extract value from JSON structure
        required: false
      ui_data:
        type: tosca.datatypes.nfv.riftio.monitoring_param_ui
        required: false
      constraints:
        type: tosca.datatypes.nfv.riftio.monitoring_param_value
        required: false
  tosca.capabilities.nfv.riftio.numa_extension:
    derived_from: tosca.capabilities.Root
    properties:
      node_cnt:
        type: integer
        description: >-
          The number of numa nodes to expose to the VM
        constraints:
          - greater_or_equal: 0
      mem_policy:
        type: string
        description: >-
          This policy specifies how the memory should
                   be allocated in a multi-node scenario.
                   STRICT    - The memory must be allocated
                               strictly from the memory attached
                               to the NUMA node.
                   PREFERRED - The memory should be allocated
                               preferentially from the memory
                               attached to the NUMA node
        constraints:
          - valid_values: [strict, preferred, STRICT, PREFERRED]
      node:
        type: list
        entry_schema:
          type: tosca.datatypes.compute.riftio.numa
  tosca.capabilities.nfv.riftio.vswitch_epa:
    derived_from: tosca.capabilities.Root
    properties:
      ovs_acceleration:
        type: string
        description: |-
          Specifies Open vSwitch acceleration mode.
             MANDATORY - OVS acceleration is required
             PREFERRED - OVS acceleration is preferred
        constraints:
          - valid_values: [mandatory, preferred, disabled, MANDATORY, PREFERRED, DISABLED]
      ovs_offload:
        type: string
        description: |-
          Specifies Open vSwitch hardware offload mode.
             MANDATORY - OVS offload is required
             PREFERRED - OVS offload is preferred
        constraints:
          - valid_values: [mandatory, preferred, disabled, MANDATORY, PREFERRED, DISABLED]

  tosca.capabilities.nfv.riftio.hypervisor_epa:
    derived_from: tosca.capabilities.Root
    properties:
      type:
        type: string
        description: |-
          Specifies the type of hypervisor.
        constraints:
          - valid_values: [prefer_kvm, require_kvm, PREFER_KVM, REQUIRE_KVM]
      version:
        type: string

  tosca.capabilities.nfv.riftio.host_epa:
    derived_from: tosca.capabilities.Root
    properties:
      cpu_model:
        type: string
        description: >-
          Host CPU model. Examples include SandyBridge,
          IvyBridge, etc.
        required: false
        constraints:
          - valid_values:
              - prefer_westmere
              - require_westmere
              - prefer_sandbridge
              - require_sandybridge
              - prefer_ivybridge
              - require_ivybridge
              - prefer_haswell
              - require_haswell
              - prefer_broadwell
              - require_broadwell
              - prefer_nehalem
              - require_nehalem
              - prefer_penryn
              - require_penryn
              - prefer_conroe
              - require_conroe
              - prefer_core2duo
              - require_core2duo
              - PREFER_WESTMERE
              - REQUIRE_WESTMERE
              - PREFER_SANDBRIDGE
              - REQUIRE_SANDYBRIDGE
              - PREFER_IVYBRIDGE
              - REQUIRE_IVYBRIDGE
              - PREFER_HASWELL
              - REQUIRE_HASWELL
              - PREFER_BROADWELL
              - REQUIRE_BROADWELL
              - PREFER_NEHALEM
              - REQUIRE_NEHALEM
              - PREFER_PENRYN
              - REQUIRE_PENRYN
              - PREFER_CONROE
              - REQUIRE_CONROE
              - PREFER_CORE2DUO
              - REQUIRE_CORE2DUO
      cpu_arch:
        type: string
        description: >-
          Host CPU architecture
        required: false
        constraints:
          - valid_values:
              - prefer_x86
              - require_x86
              - prefer_x86_64
              - require_x86_64
              - prefer_i686
              - require_i686
              - prefer_ia64
              - require_ia64
              - prefer_armv7
              - require_armv7
              - prefer_armv8
              - require_armv8
              - PREFER_X86
              - REQUIRE_X86
              - PREFER_X86_64
              - REQUIRE_X86_64
              - PREFER_I686
              - REQUIRE_I686
              - PREFER_IA64
              - REQUIRE_IA64
              - PREFER_ARMV7
              - REQUIRE_ARMV7
              - PREFER_ARMV8
              - REQUIRE_ARMV8
      cpu_vendor:
        type: string
        description: >-
          Host CPU vendor
        required: false
        constraints:
          - valid_values:
              - prefer_intel
              - require_intel
              - prefer_amd
              - requie_amd
              - PREFER_INTEL
              - REQUIRE_INTEL
              - PREFER_AMD
              - REQUIE_AMD
      cpu_socket_count:
        type: integer
        description: >-
          Number of sockets on the host
        required: false
        constraints:
          - greater_than : 0
      cpu_core_count:
        type: integer
        description: >-
          Number of cores on the host
        required: false
        constraints:
          - greater_than : 0
      cpu_core_thread_count:
        type: integer
        description: >-
          Number of threads per core on the host
        required: false
        constraints:
          - greater_than : 0
      cpu_feature:
        type: list
        entry_schema:
          type: string
        description: |-
          Enumeration for CPU features.

          AES- CPU supports advanced instruction set for
          AES (Advanced Encryption Standard).

          CAT- Cache Allocation Technology (CAT) allows
          an Operating System, Hypervisor, or similar
          system management agent to specify the amount
          of L3 cache (currently the last-level cache
          in most server and client platforms) space an
          application can fill (as a hint to hardware
          functionality, certain features such as power
          management may override CAT settings).

          CMT- Cache Monitoring Technology (CMT) allows
          an Operating System, Hypervisor, or similar
          system management agent to determine the
          usage of cache based on applications running
          on the platform. The implementation is
          directed at L3 cache monitoring (currently
          the last-level cache in most server and
          client platforms).

          DDIO- Intel Data Direct I/O (DDIO) enables
          Ethernet server NICs and controllers talk
          directly to the processor cache without a
          detour via system memory. This enumeration
          specifies if the VM requires a DDIO
          capable host.
        required: false
        constraints:
          -valid_values:
            - prefer_aes
            - require_aes
            - prefer_cat
            - require_cat
            - prefer_cmt
            - require_cmt
            - prefer_ddio
            - require_ddio
            - prefer_vme
            - require_vme
            - prefer_de
            - require_de
            - prefer_pse
            - require_pse
            - prefer_tsc
            - require_tsc
            - prefer_msr
            - require_msr
            - prefer_pae
            - require_pae
            - prefer_mce
            - require_mce
            - prefer_cx8
            - require_cx8
            - prefer_apic
            - require_apic
            - prefer_sep
            - require_sep
            - prefer_mtrr
            - require_mtrr
            - prefer_pge
            - require_pge
            - prefer_mca
            - require_mca
            - prefer_cmov
            - require_cmov
            - prefer_pat
            - require_pat
            - prefer_pse36
            - require_pse36
            - prefer_clflush
            - require_clflush
            - prefer_dts
            - require_dts
            - prefer_acpi
            - require_acpi
            - prefer_mmx
            - require_mmx
            - prefer_fxsr
            - require_fxsr
            - prefer_sse
            - require_sse
            - prefer_sse2
            - require_sse2
            - prefer_ss
            - require_ss
            - prefer_ht
            - require_ht
            - prefer_tm
            - require_tm
            - prefer_ia64
            - require_ia64
            - prefer_pbe
            - require_pbe
            - prefer_rdtscp
            - require_rdtscp
            - prefer_pni
            - require_pni
            - prefer_pclmulqdq
            - require_pclmulqdq
            - prefer_dtes64
            - require_dtes64
            - prefer_monitor
            - require_monitor
            - prefer_ds_cpl
            - require_ds_cpl
            - prefer_vmx
            - require_vmx
            - prefer_smx
            - require_smx
            - prefer_est
            - require_est
            - prefer_tm2
            - require_tm2
            - prefer_ssse3
            - require_ssse3
            - prefer_cid
            - require_cid
            - prefer_fma
            - require_fma
            - prefer_cx16
            - require_cx16
            - prefer_xtpr
            - require_xtpr
            - prefer_pdcm
            - require_pdcm
            - prefer_pcid
            - require_pcid
            - prefer_dca
            - require_dca
            - prefer_sse4_1
            - require_sse4_1
            - prefer_sse4_2
            - require_sse4_2
            - prefer_x2apic
            - require_x2apic
            - prefer_movbe
            - require_movbe
            - prefer_popcnt
            - require_popcnt
            - prefer_tsc_deadline_timer
            - require_tsc_deadline_timer
            - prefer_xsave
            - require_xsave
            - prefer_avx
            - require_avx
            - prefer_f16c
            - require_f16c
            - prefer_rdrand
            - require_rdrand
            - prefer_fsgsbase
            - require_fsgsbase
            - prefer_bmi1
            - require_bmi1
            - prefer_hle
            - require_hle
            - prefer_avx2
            - require_avx2
            - prefer_smep
            - require_smep
            - prefer_bmi2
            - require_bmi2
            - prefer_erms
            - require_erms
            - prefer_invpcid
            - require_invpcid
            - prefer_rtm
            - require_rtm
            - prefer_mpx
            - require_mpx
            - prefer_rdseed
            - require_rdseed
            - prefer_adx
            - require_adx
            - prefer_smap
            - require_smap
            - PREFER_AES
            - REQUIRE_AES
            - PREFER_CAT
            - REQUIRE_CAT
            - PREFER_CMT
            - REQUIRE_CMT
            - PREFER_DDIO
            - REQUIRE_DDIO
            - PREFER_VME
            - REQUIRE_VME
            - PREFER_DE
            - REQUIRE_DE
            - PREFER_PSE
            - REQUIRE_PSE
            - PREFER_TSC
            - REQUIRE_TSC
            - PREFER_MSR
            - REQUIRE_MSR
            - PREFER_PAE
            - REQUIRE_PAE
            - PREFER_MCE
            - REQUIRE_MCE
            - PREFER_CX8
            - REQUIRE_CX8
            - PREFER_APIC
            - REQUIRE_APIC
            - PREFER_SEP
            - REQUIRE_SEP
            - PREFER_MTRR
            - REQUIRE_MTRR
            - PREFER_PGE
            - REQUIRE_PGE
            - PREFER_MCA
            - REQUIRE_MCA
            - PREFER_CMOV
            - REQUIRE_CMOV
            - PREFER_PAT
            - REQUIRE_PAT
            - PREFER_PSE36
            - REQUIRE_PSE36
            - PREFER_CLFLUSH
            - REQUIRE_CLFLUSH
            - PREFER_DTS
            - REQUIRE_DTS
            - PREFER_ACPI
            - REQUIRE_ACPI
            - PREFER_MMX
            - REQUIRE_MMX
            - PREFER_FXSR
            - REQUIRE_FXSR
            - PREFER_SSE
            - REQUIRE_SSE
            - PREFER_SSE2
            - REQUIRE_SSE2
            - PREFER_SS
            - REQUIRE_SS
            - PREFER_HT
            - REQUIRE_HT
            - PREFER_TM
            - REQUIRE_TM
            - PREFER_IA64
            - REQUIRE_IA64
            - PREFER_PBE
            - REQUIRE_PBE
            - PREFER_RDTSCP
            - REQUIRE_RDTSCP
            - PREFER_PNI
            - REQUIRE_PNI
            - PREFER_PCLMULQDQ
            - REQUIRE_PCLMULQDQ
            - PREFER_DTES64
            - REQUIRE_DTES64
            - PREFER_MONITOR
            - REQUIRE_MONITOR
            - PREFER_DS_CPL
            - REQUIRE_DS_CPL
            - PREFER_VMX
            - REQUIRE_VMX
            - PREFER_SMX
            - REQUIRE_SMX
            - PREFER_EST
            - REQUIRE_EST
            - PREFER_TM2
            - REQUIRE_TM2
            - PREFER_SSSE3
            - REQUIRE_SSSE3
            - PREFER_CID
            - REQUIRE_CID
            - PREFER_FMA
            - REQUIRE_FMA
            - PREFER_CX16
            - REQUIRE_CX16
            - PREFER_XTPR
            - REQUIRE_XTPR
            - PREFER_PDCM
            - REQUIRE_PDCM
            - PREFER_PCID
            - REQUIRE_PCID
            - PREFER_DCA
            - REQUIRE_DCA
            - PREFER_SSE4_1
            - REQUIRE_SSE4_1
            - PREFER_SSE4_2
            - REQUIRE_SSE4_2
            - PREFER_X2APIC
            - REQUIRE_X2APIC
            - PREFER_MOVBE
            - REQUIRE_MOVBE
            - PREFER_POPCNT
            - REQUIRE_POPCNT
            - PREFER_TSC_DEADLINE_TIMER
            - REQUIRE_TSC_DEADLINE_TIMER
            - PREFER_XSAVE
            - REQUIRE_XSAVE
            - PREFER_AVX
            - REQUIRE_AVX
            - PREFER_F16C
            - REQUIRE_F16C
            - PREFER_RDRAND
            - REQUIRE_RDRAND
            - PREFER_FSGSBASE
            - REQUIRE_FSGSBASE
            - PREFER_BMI1
            - REQUIRE_BMI1
            - PREFER_HLE
            - REQUIRE_HLE
            - PREFER_AVX2
            - REQUIRE_AVX2
            - PREFER_SMEP
            - REQUIRE_SMEP
            - PREFER_BMI2
            - REQUIRE_BMI2
            - PREFER_ERMS
            - REQUIRE_ERMS
            - PREFER_INVPCID
            - REQUIRE_INVPCID
            - PREFER_RTM
            - REQUIRE_RTM
            - PREFER_MPX
            - REQUIRE_MPX
            - PREFER_RDSEED
            - REQUIRE_RDSEED
            - PREFER_ADX
            - REQUIRE_ADX
            - PREFER_SMAP
            - REQUIRE_SMAP
      om_cpu_model_string:
        type: string
        description: >-
          Openmano CPU model string
        required: false
      om_cpu_feature:
        type: list
        entry_schema:
          type: string
        description: >-
          List of openmano CPU features
        required: false

  tosca.capabilities.nfv.riftio.sfc:
    derived_from: tosca.capabilities.Root
    description: >-
      Service Function Chaining support on this VDU
    properties:
      sfc_type:
        type: string
        description: >-
          Type of node in Service Function Chaining Architecture
        constraints:
          - valid_values: [unaware, classifier, sf, sff, UNAWARE, CLASSIFIER, SF, SFF]
        default: unaware
      sf_type:
        type: string
        description: >-
          Type of Service Function.
             NOTE- This needs to map with Service Function Type in ODL to
             support VNFFG. Service Function Type is mandatory param in ODL
             SFC.
        required: false
  tosca.capabilities.Compute.Container.Architecture:
    derived_from: tosca.capabilities.Container
    properties:
      mem_page_size:
        type: string
        description: >-
          Memory page allocation size. If a VM requires
          hugepages, it should choose huge or size_2MB
          or size_1GB. If the VM prefers hugepages, it
          should chose prefer_huge.
             huge         - Require hugepages (either 2MB or 1GB)
             normal       - Does not require hugepages
             size_2MB     - Requires 2MB hugepages
             size_1GB     - Requires 1GB hugepages
             prefer_huge  - Application perfers hugepages
          NOTE - huge and normal is only defined in standards as of
                 now.
        required: false
        constraints:
          - valid_values: [normal, huge, size_2MB, size_1GB, prefer_huge, NORMAL, HUGE, SIZE_2MB, SIZE_1GB, PREFER_HUGE]
      cpu_allocation:
        type: tosca.datatypes.compute.Container.Architecture.CPUAllocation
        required: false
      numa_nodes:
        type: map
        required: false
        entry_schema:
          type: tosca.datatypes.compute.Container.Architecture.NUMA


node_types:
  tosca.nodes.nfv.riftio.VDU1:
    derived_from: tosca.nodes.nfv.VDU
    properties:
      description:
        type: string
        required: false
      image:
        description: >-
          If an image is specified here, it is assumed that the image
          is already present in the RO or VIM and not in the package.
        type: string
        required: false
      image_checksum:
        type: string
        description: >-
          Image checksum for the image in RO or VIM.
        required: false
      cloud_init:
        description: >-
          Inline cloud-init specification
        required: false
        type: string
      count:
        default: 1
        type: integer
    capabilities:
      virtualLink:
        type: tosca.capabilities.nfv.VirtualLinkable
      monitoring_param_1:
        type: tosca.capabilities.nfv.riftio.monitoring_param
      mgmt_interface:
        type: tosca.capabilities.nfv.riftio.mgmt_interface
      monitoring_param:
        type: tosca.capabilities.nfv.riftio.monitoring_param
      numa_extension:
        type: tosca.capabilities.nfv.riftio.numa_extension
      vswitch_epa:
        type: tosca.capabilities.nfv.riftio.vswitch_epa
      hypervisor_epa:
        type: tosca.capabilities.nfv.riftio.hypervisor_epa
      host_epa:
        type: tosca.capabilities.nfv.riftio.host_epa
  tosca.nodes.nfv.riftio.CP1:
    derived_from: tosca.nodes.nfv.CP
    properties:
      cp_type:
        description: Type of the connection point
        type: string
        default: VPORT
        constraints:
          - valid_values: [VPORT]
      name:
        description: Name of the connection point
        type: string
        required: false
      vdu_intf_name:
        description: Name of the interface on VDU
        type: string
      vdu_intf_type:
        description: >-
          Specifies the type of virtual interface
             between VM and host.
             VIRTIO          - Use the traditional VIRTIO interface.
             PCI-PASSTHROUGH - Use PCI-PASSTHROUGH interface.
             SR-IOV          - Use SR-IOV interface.
             E1000           - Emulate E1000 interface.
             RTL8139         - Emulate RTL8139 interface.
             PCNET           - Emulate PCNET interface.
             OM-MGMT         - Used to specify openmano mgmt external-connection type
        type: string
        constraints:
          - valid_values: [OM-MGMT, VIRTIO, E1000, SR-IOV]
      bandwidth:
        type: integer
        description: Aggregate bandwidth of the NIC
        constraints:
          - greater_or_equal: 0
        required: false
      vpci:
        type: string
        description: >-
          Specifies the virtual PCI address. Expressed in
          the following format dddd:dd:dd.d. For example
          0000:00:12.0. This information can be used to
          pass as metadata during the VM creation.
        required: false
    capabilities:
      sfc:
        type: tosca.capabilities.nfv.riftio.sfc
  tosca.nodes.nfv.riftio.VNF1:
    derived_from: tosca.nodes.nfv.VNF
    properties:
      member_index:
        type: integer
        constraints:
          - greater_or_equal: 1
        description: Index of the VNF in the NS
        required: false
      start_by_default:
        type: boolean
        default: true
        description: Start this VNF on NS instantiate
      logo:
        type: string
        description: >-
          Logo to display with the VNF in the orchestrator
        required: false
    capabilities:      
      mgmt_interface:
        type: tosca.capabilities.nfv.riftio.mgmt_interface
      monitoring_param:
        type: tosca.capabilities.nfv.riftio.monitoring_param
      sfc:
        type: tosca.capabilities.nfv.riftio.sfc
  tosca.nodes.nfv.riftio.ELAN:
    derived_from: tosca.nodes.nfv.VL.ELAN
    properties:
      description:
        type: string
        required: false
      network_name:
        type: string
        description: >-
          Name of network in VIM account. This is used to indicate
          pre-provisioned network name in cloud account.
        required: false
      root_bandwidth:
        type: integer
        description: >-
          This is the aggregate bandwidth
        constraints:
          - greater_or_equal: 0
        required: false
      leaf_bandwidth:
        type: integer
        description: >-
          This is the bandwidth of branches
        constraints:
          - greater_or_equal: 0
        required: false
  tosca.nodes.nfv.riftio.FP1:
    derived_from: tosca.nodes.nfv.FP
    properties:
      id:
        type: integer
        required: false
      policy:
        type: tosca.nfv.datatypes.policyType
        required: true
        description: policy to use to match traffic for this FP
      path:
        type: list
        required: true
        entry_schema:
          type: tosca.nfv.datatypes.pathType
      cp:
        type: tosca.nfv.datatypes.pathType
        required: true



artifact_types:
  tosca.artifacts.Deployment.riftio.cloud_init_file:
    derived_from: tosca.artifacts.Deployment
    file:
      type: string

  tosca.artifacts.Deployment.Image.riftio.QCOW2:
    derived_from: tosca.artifacts.Deployment.Image.VM.QCOW2
    image_checksum:
      required: false
      type: string

group_types:
  tosca.groups.nfv.VNFFG:
    derived_from: tosca.groups.Root
    properties:
      vendor:
        type: string
        required: true
        description: name of the vendor who generate this VNFFG
      version:
        type: string
        required: true
        description: version of this VNFFG
      number_of_endpoints:
        type: integer
        required: true
        description: count of the external endpoints included in this VNFFG
      dependent_virtual_link:
        type: list
        entry_schema:
          type: string
        required: true
        description: Reference to a VLD used in this Forwarding Graph
      connection_point:
        type: list
        entry_schema:
          type: string
        required: true
        description: Reference to Connection Points forming the VNFFG
      constituent_vnfs:
        type: list
        entry_schema:
          type: string
        required: true
        description: Reference to a list of VNFD used in this VNF Forwarding Graph
    members: [ tosca.nodes.nfv.FP ]

  tosca.groups.nfv.riftio.scaling:
    derived_from: tosca.groups.Root
    properties:
      name:
        type: string
      min_instances:
        type: integer
        description: >-
          Minimum instances of the scaling group which are allowed.
          These instances are created by default when the network service
          is instantiated.
      max_instances:
        type: integer
        description: >-
          Maximum instances of this scaling group that are allowed
          in a single network service. The network service scaling
          will fail, when the number of service group instances
          exceed the max-instance-count specified.
      cooldown_time:
        type: integer
        description: >-
          The duration after a scaling-in/scaling-out action has been
          triggered, for which there will be no further optional
      ratio:
        type: map
        entry_schema:
          type: integer
        description: >-
          Specify the number of instances of each VNF to instantiate
          for a scaling action
    members: [tosca.nodes.nfv.VNF]
    interfaces:
      action:
        type: tosca.interfaces.nfv.riftio.scaling.action

interface_types:
  tosca.interfaces.nfv.riftio.scaling.action:
    pre_scale_in:
      description: Operation to execute before a scale in
    post_scale_in:
      description: Operation to execute after a scale in
    pre_scale_out:
      description: Operation to execute before a scale out
    post_scale_out:
      description: Operation to execute after a scale out

policy_types:
  tosca.policies.nfv.riftio.placement:
    derived_from: tosca.policies.Placement
    properties:
      name:
        type: string
        description: >-
          Place group construct to define the compute resource placement strategy
          in cloud environment
      requirement:
        type: string
        description: >-
          This is free text space used to describe the intent/rationale
          behind this placement group. This is for human consumption only
      strategy:
        type: string
        description: >-
          Strategy associated with this placement group
             Following values are possible
               COLOCATION - Colocation strategy imply intent to share the physical
                            infrastructure (hypervisor/network) among all members
                            of this group.
               ISOLATION - Isolation strategy imply intent to not share the physical
                           infrastructure (hypervisor/network) among the members
                           of this group.
        constraints:
          valid_values:
            - COLOCATION
            - ISOLATION
  tosca.policies.nfv.riftio.vnf_configuration:
    derived_from: tosca.policies.Root
    properties:
      config:
        type: tosca.datatypes.nfv.riftio.vnf_configuration
      initial_config:
        type: list
        entry_schema:
          type: tosca.datatypes.nfv.riftio.config_primitive
  tosca.policies.nfv.riftio.vnf_service_primitives:
    derived_from: tosca.policies.Root
    properties:
      parameter:
        type: map
        entry_schema:
          type: primitive_parameter
  tosca.policies.nfv.riftio.ns_service_primitives:
    derived_from: tosca.policies.Root
    properties:
      parameter:
        type: map
        entry_schema:
          type: primitive_parameter
      parameter_group:
        type: tosca.datatypes.nfv.riftio.primitive_parameter_group
        description: >-
          Grouping of parameters which are logically grouped in UI
        required: false
      vnf_primitive_group:
        type: tosca.datatypes.nfv.riftio.vnf_primitive_group
        description: >-
          List of service primitives grouped by VNF
        required: false
      user_defined_script:
        type: string
        description: >-
          A user defined script
        required: false
  tosca.policies.nfv.riftio.initial_config_primitive:
    derived_from: tosca.policies.Root
    properties:
      name:
        type: string
      seq:
        type: integer
        description: >-
          Order in which to apply, when multiple ones are defined
        default: 0
        constraints:
          - greater_or_equal: 0
      parameter:
        type: map
        entry_schema:
          type: string
      user_defined_script:
        type: string
  tosca.policies.nfv.riftio.users:
    derived_from: tosca.policies.Root
    description: >-
      Specify list of public keys to be injected as
      part of NS instantitation. Use default as entry,
      to specify the key pairs for default user.
    properties:
      user_info:
        type: string
        description: >-
          The user\'s real name
        required: false
      key_pairs:
        type: map
        description: >-
          List of public keys for the user
        entry_schema:
          type: string
        required: true
  tosca.policies.nfv.riftio.dependency:
    derived_from: tosca.policies.Root
    description: >-
      Map dependency between VDUs or VNFs
    properties:
      parameter:
        type: map
        entry_schema:
          type: string
        description: >-
          Parameter and value for the config
  tosca.nfv.datatypes.policyType:
    properties:
      type:
        type: string
        required: false
        constraints:
          - valid_values: [ ACL ]
      criteria:
        type: list
        required: true
        entry_schema:
          type: tosca.nfv.datatypes.aclType
topology_template:
  node_templates:
    new_vnfd:
      type: tosca.nodes.nfv.riftio.VNF1
      properties:
        id: 2
        vendor: RIFT.io
        version: 1.0
