VMware Telco Cloud Automation uses modified TOSCA, which is an extension of the standard TOSCA, to determine prerequisites for different VIMs.

The root node tosca.nodes.nfv.VMware.VNF defines the VNF definition like CaaS and NodeConfig related requirements in the TOSCA.

The infra_requirements property at the root node defines these infrastructure requirements for the Network Function.

The sample shows customized TOSCA with the infrastructure requirements definition.
TOSCA Sample
tosca_definitions_version: tosca_simple_yaml_1_2
description: Network Function description
imports:
- etsi_nfv_sol001_common_2_7_1_types.yaml
- etsi_nfv_sol001_vnfd_2_7_1_types.yaml
- vmware_nfv_custom_vnfd_2_7_1_types.yaml
node_types:
  tosca.nodes.nfv.VMware.CNF.testnf:
    derived_from: tosca.nodes.nfv.VMware.CNF
    interfaces:
      Vnflcm:
        type: tosca.interfaces.nfv.VMware.Vnflcm
  tosca.nodes.nfv.Vdu.Compute.Helm.testnf:
    derived_from: tosca.nodes.nfv.Vdu.Compute.Helm
    properties:
      configurable_properties:
        type: tosca.datatypes.nfv.VnfcConfigurableProperties.testnf
        required: true
data_types:
  tosca.datatypes.nfv.VnfcConfigurableProperties.testnf:
    derived_from: tosca.datatypes.nfv.VnfcConfigurableProperties
    properties:
      additional_vnfc_configurable_properties:
        type: tosca.datatypes.nfv.VnfcAdditionalConfigurableProperties.testnf
        description: Describes additional configuration for VNFC that can be configured
        required: true
  tosca.datatypes.nfv.VnfcAdditionalConfigurableProperties.testnf:
    derived_from: tosca.datatypes.nfv.VnfcAdditionalConfigurableProperties
    properties:
      values:
        required: false
        propertyName: values
        description: ''
        default: ''
        type: string
        format: file
      vlan3:
        required: true
        propertyName: vlan3
        description: Network interface providing PF config for sriov with ipam
        default: ''
        type: string
        format: network
      vlan4:
        required: true
        propertyName: vlan4
        description: Network interface providing PF config for sriov with igb_uio
        default: ''
        type: string
        format: network
      vlan5:
        required: true
        propertyName: vlan5
        description: Network interface providing PF config for sriov with vfio-pci
        default: ''
        type: string
        format: network
  tosca.datatypes.nfv.VMware.Interface.InstantiateStartInputParameters:
    derived_from: tosca.datatypes.nfv.VnfOperationAdditionalParameters
    properties:
      USERNAME:
        name: USERNAME
        type: string
        description: K8s master username
        required: true
        default: ''
        format: string
      PASSWORD:
        name: PASSWORD
        type: password
        description: K8s master password
        required: true
        default: ''
        format: password
      IP:
        name: IP
        type: string
        description: K8s master ip address
        required: true
        default: ''
        format: string
      K8S_NAMESPACE:
        name: K8S_NAMESPACE
        type: string
        description: K8S namespace for testnf
        required: true
        default: testnf
        format: string
      NAD_FILE:
        name: NAD_FILE
        type: string
        description: The NAD Config file
        required: true
        default: ''
        format: file
      NODE_POOL_FOR_CAT:
        name: NODE_POOL_FOR_CAT
        type: string
        description: Node pool to enable CAT (Cache Allocation Technology), leave it empty if CAT is not required.
        required: false
        default: ''
        format: string
  tosca.datatypes.nfv.VMware.Interface.InstantiateStartOutputParameters:
    derived_from: tosca.datatypes.nfv.VnfOperationAdditionalParameters
    properties:
      nsCreateResult:
        name: nsCreateResult
        type: string
        description: ''
      copyNADResult:
        name: copyNADResult
        type: string
        description: ''
      nadCreateResult:
        name: nadCreateResult
        type: string
        description: ''
  tosca.datatypes.nfv.VMware.Interface.InstantiateEndInputParameters:
    derived_from: tosca.datatypes.nfv.VnfOperationAdditionalParameters
    properties:
      USERNAME:
        name: USERNAME
        type: string
        description: K8s master username
        required: true
        default: ''
        format: string
      PASSWORD:
        name: PASSWORD
        type: password
        description: K8s master password
        required: true
        default: ''
        format: password
      IP:
        name: IP
        type: string
        description: K8s master ip address
        required: true
        default: ''
        format: string
      K8S_NAMESPACE:
        name: K8S_NAMESPACE
        type: string
        description: K8S namespace for testnf
        required: true
        format: string
      NODE_POOL_FOR_CAT:
        name: NODE_POOL_FOR_CAT
        type: string
        description: Node pool to verify CAT (Cache Allocation Technology), leave it empty if CAT is not enabled.
        required: false
        default: ''
        format: string
  tosca.datatypes.nfv.VMware.Interface.InstantiateEndOutputParameters:
    derived_from: tosca.datatypes.nfv.VnfOperationAdditionalParameters
    properties:
      nsCheckResult:
        name: nsCheckResult
        type: string
        description: ''
      nadCheckResult:
        name: nadCheckResult
        type: string
        description: ''
      copyResult:
        name: copyResult
        type: string
        description: ''
topology_template:
  substitution_mappings:
    node_type: tosca.nodes.nfv.VMware.CNF.testnf
  node_templates:
    testnf:
      properties:
        descriptor_id: vnfd_4501ecbe-4414-11eb-bf08-9b885
        provider: VMware
        vendor: VMware
        product_name: testnf
        version: 2.0.0
        id: testnf
        software_version: 2.0.0
        descriptor_version: 2.0.0
        flavour_id: default
        flavour_description: default
        vnfm_info:
        - gvnfmdriver
        infra_requirements:
          node_components:
            isNumaConfigNeeded: true
            kernel:
              kernel_type:
                name: linux-rt
                version: 4.19.198-5.ph3
              kernel_args:
              - key: nosoftlockup
              - key: noswap
              - key: softlockup_panic
                value: 0
              - key: pcie_aspm.policy
                value: performance
              - key: intel_idle.max_cstate
                value: 1
              - key: mce
                value: ignore_ce
              - key: fsck.mode
                value: force
              - key: fsck.repair
                value: yes
              - key: nowatchdog
              - key: cpuidle.off
                value: 1
              - key: nmi_watchdog
                value: 0
              - key: audit
                value: 0
              - key: processor.max_cstate
                value: 1
              - key: intel_pstate
                value: disable
              - key: isolcpus
                value: 4-{{tca.node.vmNumCPUs}}
              - key: skew_tick
                value: 1
              - key: irqaffinity
                value: 0-3
              - key: selinux
                value: 0
              - key: enforcing
                value: 0
              - key: nohz
                value: 'on'
              - key: nohz_full
                value: 4-{{tca.node.vmNumCPUs}}
              - key: rcu_nocb_poll
                value: 1
              - key: rcu_nocbs
                value: 4-{{tca.node.vmNumCPUs}}
              - key: idle
                value: poll
              - key: default_hugepagesz
                value: 1G
              - key: hugepagesz
                value: 1G
              - key: hugepages
                value: 8
              - key: intel_iommu
                value: 'on'
              - key: iommu
                value: pt
              - key: clock
                value: tsc
              - key: clocksource
                value: tsc
              - key: tsc
                value: reliable
              kernel_modules:
              - name: dpdk
                version: '20.11'
              custom_packages:
              - name: pciutils
                version: 3.6.2-1.ph3
              - name: tuned
                version: 2.13.0-4.ph3
              - name: linuxptp
                version: 3.1-1.ph3
              - name: stalld
                version: 1.3.0-8.ph3
            file_injection:
            - source: file
              content: ../Artifacts/scripts/realtime-variables.conf
              path: /etc/tuned/realtime-variables.conf
            - source: file
              content: ../Artifacts/scripts/testnf-stalld.conf
              path: /etc/sysconfig/stalld
            additional_config:
            - name: tuned
              value: '[{"name":"realtime"}]'
            network:
              devices:
              - deviceType: sriov
                networkName: vlan3
                resourceName: sriovpass
              - deviceType: sriov
                networkName: vlan4
                resourceName: sriovigbuio
                dpdkBinding: igb_uio
                count: 2
              - deviceType: sriov
                networkName: vlan5
                resourceName: sriovvfio
                dpdkBinding: vfio-pci
          caas_components:
          - name: sriov
            type: cni
      interfaces:
        Vnflcm:
          instantiate_start:
            implementation: ../Artifacts/workflows/PreInstantiation_WF.json
            description: Configure testnf using a configmap
            inputs:
              type: tosca.datatypes.nfv.VMware.Interface.InstantiateStartInputParameters
              USERNAME: 
              PASSWORD: 
              IP: 
              K8S_NAMESPACE: testnf
              NAD_FILE: ''
              NODE_POOL_FOR_CAT: ''
            outputs:
              type: tosca.datatypes.nfv.VMware.Interface.InstantiateStartOutputParameters
              nsCreateResult: ''
              copyNADResult: ''
              nadCreateResult: ''
          instantiate_end:
            implementation: ../Artifacts/workflows/PostInstantiation_WF.json
            description: Configure testnf using a configmap
            inputs:
              type: tosca.datatypes.nfv.VMware.Interface.InstantiateEndInputParameters
              USERNAME: 
              PASSWORD: 
              IP: 
              K8S_NAMESPACE: ''
              NODE_POOL_FOR_CAT: ''
            outputs:
              type: tosca.datatypes.nfv.VMware.Interface.InstantiateEndOutputParameters
              nsCheckResult: ''
              nadCheckResult: ''
      type: tosca.nodes.nfv.VMware.CNF.testnf
    testnf1:
      type: tosca.nodes.nfv.Vdu.Compute.Helm.testnf
      properties:
        name: testnf
        description: Chart for testnf
        chartName: testnf-du
        chartVersion: 2.0.0
        helmVersion: v3
        configurable_properties:
          additional_vnfc_configurable_properties:
            values: ''
            vlan3: ''
            vlan4: ''
            vlan5: ''
interface_types:
  tosca.interfaces.nfv.VMware.Vnflcm:
    derived_from: tosca.interfaces.nfv.Vnflcm
    instantiate_start:
      description: interface description
    instantiate_end:
      description: interface description