{
  "description": "This type represents a subscription related to notifications about VNF package management.\n",
  "type": "object",
  "required": [
    "id",
    "callbackUri",
    "_links"
  ],
  "properties": {
    "id": {
      "description": "An identifier with the intention of being globally unique.\n",
      "type": "string"
    },
    "filter": {
      "description": "This type represents a subscription filter related to notifications related to VNF package management. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
      "type": "object",
      "properties": {
        "notificationTypes": {
          "description": "Match particular notification types. Permitted values: - VnfPackageOnboardingNotification - VnfPackageChangeNotification The permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of the notification types to facilitate automated code generation systems.\n",
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "VnfPackageOnboardingNotification",
              "VnfPackageChangeNotification"
            ]
          }
        },
        "vnfProductsFromProviders": {
          "description": "If present, match VNF packages that contain VNF products from certain providers. The attributes \"vnfProductsFromProviders\", \"vnfdId\" and \"vnfPkgId\" are alternatives to reference to particular VNF packages in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "vnfProvider"
            ],
            "properties": {
              "vnfProvider": {
                "description": "Name of the VNF provider to match.\n",
                "type": "string"
              },
              "vnfProducts": {
                "description": "If present, match VNF packages that contain VNF products with certain product names, from one particular provider.\n",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "vnfProductName"
                  ],
                  "properties": {
                    "vnfProductName": {
                      "description": "Name of the VNF product to match.\n",
                      "type": "string"
                    },
                    "versions": {
                      "description": "If present, match VNF packages that contain VNF products with certain versions and a certain product name, from one particular provider.\n",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "vnfSoftwareVersion"
                        ],
                        "properties": {
                          "vnfSoftwareVersion": {
                            "description": "A Version.\n",
                            "type": "string"
                          },
                          "vnfdVersions": {
                            "description": "If present, match VNF packages that contain VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n",
                            "type": "array",
                            "items": {
                              "description": "A Version.\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "vnfdId": {
          "description": "Match VNF packages with a VNFD identifier listed in the attribute. The attributes \"vnfProductsFromProviders\", \"vnfdId\" and \"vnfPkgId\" are alternatives to reference to particular VNF packages in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
          "type": "array",
          "items": {
            "description": "An identifier with the intention of being globally unique.\n",
            "type": "string"
          }
        },
        "vnfPkgId": {
          "description": "Match VNF packages with a package identifier listed in the attribute. May be present if the \"notificationTypes\" attribute contains the value \"VnfPackageChangeNotification\", and shall be absent otherwise. The attributes \"vnfProductsFromProviders\", \"vnfdId\" and \"vnfPkgId\" are alternatives to reference to particular VNF packages in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
          "type": "array",
          "items": {
            "description": "An identifier with the intention of being globally unique.\n",
            "type": "string"
          }
        },
        "operationalState": {
          "description": "- ENABLED: The VNF package is enabled, i.e. it can be used for  instantiation of new VNF instances.\n- DISABLED: The VNF package is disabled, i.e. it cannot be used for  further VNF instantiation requests (unless and until the VNF package\n  is re-enabled).\n",
          "type": "string",
          "enum": [
            "ENABLED",
            "DISABLED"
          ]
        },
        "usageState": {
          "description": "- IN_USE: VNF instances instantiated from this VNF package exist. - NOT_IN_USE: No existing VNF instance is instantiated from this VNF  package.\n"
        }
      }
    },
    "callbackUri": {
      "description": "String formatted according to IETF RFC 3986.\n",
      "type": "string"
    },
    "_links": {
      "description": "Links to resources related to this resource.\n",
      "type": "object",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "description": "This type represents a link to a resource.\n",
          "type": "object",
          "required": [
            "href"
          ],
          "properties": {
            "href": {
              "description": "URI of the referenced resource.\n",
              "type": "string",
              "format": "url"
            }
          }
        }
      }
    }
  }
}