# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

capability_types:

  tosca.capabilities.nfv.VirtualBindable:
    _extensions:
      normative: true
      shorthand_name: VirtualBindable
      type_qualified_name: tosca:VirtualBindable
      specification: tosca-simple-nfv-1.0
      specification_section: 5.5.1
      specification_url: 'http://docs.oasis-open.org/tosca/tosca-nfv/v1.0/csd04/tosca-nfv-v1.0-csd04.html#_Toc482896069'
    description: >-
      A node type that includes the VirtualBindable capability indicates that it can be pointed by
      tosca.relationships.nfv.VirtualBindsTo relationship type.
    derived_from: tosca.capabilities.Node

  tosca.capabilities.nfv.Metric:
    _extensions:
      normative: true
      shorthand_name: Metric
      type_qualified_name: tosca:Metric
      specification: tosca-simple-nfv-1.0
      specification_section: 5.5.2
      specification_url: 'http://docs.oasis-open.org/tosca/tosca-nfv/v1.0/csd04/tosca-nfv-v1.0-csd04.html#_Toc482896070'
    description: >-
      A node type that includes the Metric capability indicates that it can be monitored using an nfv.relationships.Monitor
      relationship type.
    derived_from: tosca.capabilities.Endpoint

  tosca.capabilities.nfv.VirtualCompute:
    _extensions:
      normative: true
      shorthand_name: VirtualCompute
      type_qualified_name: tosca:VirtualCompute
      specification: tosca-simple-nfv-1.0
      specification_section: 5.5.3
      specification_url: 'http://docs.oasis-open.org/tosca/tosca-nfv/v1.0/csd04/tosca-nfv-v1.0-csd04.html#_Toc482896071'
    derived_from: tosca.capabilities.Root
    properties:
      requested_additional_capabilities:
        # ARIA NOTE: in section [5.5.3.1 Properties] the name of this property is
        # "request_additional_capabilities", and its type is not a map, but
        # tosca.datatypes.nfv.RequestedAdditionalCapability
        description: >-
          Describes additional capability for a particular VDU.
        type: map
        entry_schema:
           type: tosca.datatypes.nfv.RequestedAdditionalCapability
        required: false
      virtual_memory:
        description: >-
          Describes virtual memory of the virtualized compute.
        type: tosca.datatypes.nfv.VirtualMemory
        required: true
      virtual_cpu:
        description: >-
          Describes virtual CPU(s) of the virtualized compute.
        type: tosca.datatypes.nfv.VirtualCpu
        required: true
