{
  "type": "object",
  "description": "This type represents a subscription related to notifications about VNF lifecycle changes.\n",
  "required": [
    "id",
    "callbackUri",
    "_links"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "An identifier with the intention of being globally unique.\n"
    },
    "filter": {
      "type": "object",
      "description": "This type represents a subscription filter related to notifications about VNF lifecycle changes. 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",
      "properties": {
        "vnfInstanceSubscriptionFilter": {
          "type": "object",
          "description": "This type represents subscription filter criteria to match VNF instances.\n",
          "properties": {
            "vnfdIds": {
              "type": "array",
              "description": "If present, match VNF instances that were created based on a VNFD identified by one of the vnfdId values listed in this attribute. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
              "items": {
                "type": "string",
                "description": "An identifier with the intention of being globally unique.\n"
              }
            },
            "vnfProductsFromProviders": {
              "type": "array",
              "description": "If present, match VNF instances that belong to VNF products from certain providers. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
              "items": {
                "type": "object",
                "required": [
                  "vnfProvider"
                ],
                "properties": {
                  "vnfProvider": {
                    "type": "string",
                    "description": "Name of the VNF provider to match.\n"
                  },
                  "vnfProducts": {
                    "type": "array",
                    "description": "If present, match VNF instances that belong to VNF products with certain product names, from one particular provider.\n",
                    "items": {
                      "type": "object",
                      "required": [
                        "vnfProductName"
                      ],
                      "properties": {
                        "vnfProductName": {
                          "type": "string",
                          "description": "Name of the VNF product to match.\n"
                        },
                        "versions": {
                          "type": "array",
                          "description": "If present, match VNF instances that belong to VNF products with certain versions and a certain product name, from one particular provider.\n",
                          "items": {
                            "type": "object",
                            "required": [
                              "vnfSoftwareVersion"
                            ],
                            "properties": {
                              "vnfSoftwareVersion": {
                                "type": "string",
                                "description": "A version.\n"
                              },
                              "vnfdVersions": {
                                "type": "array",
                                "description": "If present, match VNF instances that belong to VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n",
                                "items": {
                                  "type": "string",
                                  "description": "A version.\n"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "vnfInstanceIds": {
              "type": "array",
              "description": "If present, match VNF instances with an instance identifier listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
              "items": {
                "type": "string",
                "description": "An identifier with the intention of being globally unique.\n"
              }
            },
            "vnfInstanceNames": {
              "type": "array",
              "description": "If present, match VNF instances with a VNF Instance Name listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "notificationTypes": {
          "type": "array",
          "description": "Match particular notification types. Permitted values: * VnfLcmOperationOccurrenceNotification * VnfIdentifierCreationNotification * VnfIdentifierDeletionNotification The permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of the notification types to facilitate automated code generation systems.\n",
          "items": {
            "type": "string",
            "enum": [
              "VnfLcmOperationOccurrenceNotification",
              "VnfIdentifierCreationNotification",
              "VnfIdentifierDeletionNotification"
            ]
          }
        },
        "operationTypes": {
          "type": "array",
          "description": "Match particular VNF lifecycle operation types for the notification of type VnfLcmOperationOccurrenceNotification. May be present if the \"notificationTypes\" attribute contains the value \"VnfLcmOperationOccurrenceNotification\", and shall be absent otherwise.\n",
          "items": {
            "type": "string",
            "enum": [
              "INSTANTIATE",
              "SCALE",
              "SCALE_TO_LEVEL",
              "CHANGE_FLAVOUR",
              "TERMINATE",
              "HEAL",
              "OPERATE",
              "CHANGE_EXT_CONN",
              "MODIFY_INFO"
            ],
            "description": "Value | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation.    SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation.     \n"
          }
        },
        "operationStates": {
          "type": "array",
          "description": "Match particular LCM operation state values as reported in notifications of type VnfLcmOperationOccurrenceNotification. May be present if the \"notificationTypes\" attribute contains the value \"VnfLcmOperationOccurrenceNotification\", and shall be absent otherwise.\n",
          "items": {
            "type": "string",
            "enum": [
              "STARTING",
              "PROCESSING",
              "COMPLETED",
              "FAILED_TEMP",
              "FAILED",
              "ROLLING_BACK",
              "ROLLED_BACK"
            ],
            "description": "Value | Description ------|------------ STARTING | The LCM operation is starting. PROCESSING | The LCM operation is currently in execution. COMPLETED | he LCM operation has been completed successfully. FAILED_TEMP | The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED | The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK | The LCM operation is currently being rolled back. ROLLED_BACK | The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n"
          }
        }
      }
    },
    "callbackUri": {
      "type": "string",
      "description": "String formatted according to IETF RFC 3986.\n"
    },
    "_links": {
      "type": "object",
      "description": "Links to resources related to this resource.\n",
      "required": [
        "self"
      ],
      "properties": {
        "self": {
          "type": "object",
          "description": "This type represents a link to a resource.\n",
          "required": [
            "href"
          ],
          "properties": {
            "href": {
              "type": "string",
              "description": "URI of the referenced resource.\n",
              "format": "url"
            }
          }
        }
      }
    }
  }
}