{
	"description": "This type represents an NFV-MANO functional entity. *  NOTE 1:\tIt shall be present when \"type\" attribute is \"NFVO\", and it shall be absent in any other case. *  NOTE 2:\tIt shall be present when \"type\" attribute is \"VNFM\", and it shall be absent in any other case. *  NOTE 3:\tIt shall be present when \"type\" attribute is \"VIM\", and it shall be absent in any other case. *  NOTE 4:\tThe information about the NFV-MANO services offered by a specific type of NFV-MANO functional\n            entity is specified by the manoServices attribute.\n*  NOTE 5:\tIt is optional for the API producer to support the \"manoEntityComponents\" attribute. *  NOTE 6:\tIt shall be present when \"type\" attribute is \"WIM\", and it shall be absent in any other case.\n",
	"type": "object",
	"required": ["id", "type", "name", "description", "provider", "softwareVersion", "manoConfigurableParams", "manoApplicationState", "_links"],
	"properties": {
		"id": {
			"description": "An identifier with the intention of being globally unique.\n",
			"type": "string"
		},
		"type": {
			"description": "The enumeration ManoEntityEnumType defines the permitted values to represent NFV-MANO functional entities. It shall comply with the provisions :\n  - NFVO\tThe NFV-MANO functional entity is an NFVO.\n  - VNFM\tThe NFV-MANO functional entity is a VNFM.\n  - VIM\t    The NFV-MANO functional entity is a VIM.\n  - WIM     The NFV-MANO functional entity is a WIM.\n",
			"type": "string",
			"enum": ["NFVO", "VNFM", "VIM", "WIM"]
		},
		"name": {
			"description": "Human-readable name of the NFV-MANO functional entity.\nThis attribute can be modified with the PATCH method.\n",
			"type": "string"
		},
		"description": {
			"description": "Human-readable description of the NFV-MANO functional entity.\nThis attribute can be modified with the PATCH method.\n",
			"type": "string"
		},
		"provider": {
			"description": "Information about the provider of the NFV-MANO functional entity. It typically includes the name of the provider.\n",
			"type": "string"
		},
		"softwareVersion": {
			"description": "A version.\n",
			"type": "string"
		},
		"manoEntityComponents": {
			"description": "The deployed NFV-MANO functional entity components which realize the NFV-MANO functional entity. See note 5.\n",
			"type": "array",
			"items": {
				"description": "This type represents information of a deployed component realizing part of an NFV-MANO functional entity. It is optional for the API producer to support this type.\n",
				"type": "object",
				"required": ["id"],
				"properties": {
					"id": {
						"description": "An identifier that is unique for the respective type within a NFV-MANO functional entity, but that need not be globally unique. Representation: string of variable length..\n",
						"type": "string"
					},
					"manoServiceIds": {
						"description": "References to the NFV-MANO services that depend on the NFV-MANO functional entity component. The identifier of the ManoService is referred. A service may depend on multiple components. Multiple services may depend on the same component.\n",
						"type": "array",
						"items": {
							"description": "An identifier that is unique for the respective type within a NFV-MANO functional entity, but that need not be globally unique. Representation: string of variable length..\n",
							"type": "string"
						}
					}
				}
			}
		},
		"manoServices": {
			"description": "Information about the NFV-MANO services provided by the NFV-MANO functional entity.\n",
			"type": "array",
			"items": {
				"description": "This type represents information about an NFV-MANO service provided by the NFV-MANO functional entity. * NOTE:\tA cardinality greater than one supports having different interface versions or api Endpoints\n        to be used for accessing the same instance of an NFV-MANO service.\n",
				"type": "object",
				"required": ["id", "name", "description", "manoServiceInterfaceIds", "_links"],
				"properties": {
					"id": {
						"description": "An identifier that is unique for the respective type within a NFV-MANO functional entity, but that need not be globally unique. Representation: string of variable length..\n",
						"type": "string"
					},
					"name": {
						"description": "Human-readable name of the NFV-MANO service.\nThis attribute can be modified with the PATCH method.\n",
						"type": "string"
					},
					"description": {
						"description": "Human-readable description of the NFV-MANO service.\nThis attribute can be modified with the PATCH method.\n",
						"type": "string"
					},
					"manoServiceInterfaceIds": {
						"description": "Reference to the NFV-MANO interfaces associated to the NFV-MANO service. If cardinality is greater than one, the type of ManoServiceInterface (see clause 5.6.3.3) shall be the same. The identifier of the ManoServiceInterface is referred. See note\n",
						"type": "array",
						"items": {
							"description": "An identifier that is unique for the respective type within a NFV-MANO functional entity, but that need not be globally unique. Representation: string of variable length..\n",
							"type": "string"
						},
						"minItems": 1
					},
					"_links": {
						"description": "Links to resources related to this resource.\n",
						"type": "object",
						"properties": {
							"manoServiceInterfaces": {
								"description": "Link to the \"individual NFV-MANO service interface\" resources with information about the associated interfaces to the NFV-MANO service.\n",
								"type": "array",
								"items": {
									"description": "This type represents a link to a resource using an absolute URI.\n",
									"type": "object",
									"required": ["href"],
									"properties": {
										"href": {
											"description": "String formatted according to IETF RFC 3986.\n",
											"type": "string"
										}
									}
								},
								"minItems": 1
							}
						},
						"required": ["manoServiceInterfaces"]
					}
				}
			}
		},
		"manoConfigurableParams": {
			"description": "ManoConfigurableParams\n"
		},
		"manoApplicationState": {
			"description": "Information and current values of the NFV-MANO functional entity’s application state.\n",
			"type": "object",
			"required": ["operationalState", "administrativeState", "usageState"],
			"properties": {
				"operationalState": {
					"description": "The enumeration OperationalStateEnumType defines values representing the operational state of an NFV-MANO functional application type of managed entity. The OperationalStateEnumType shall comply with the provisions:\n  - STARTED\tThe managed entity is operational.\n  - STOPPED\tThe managed entity is not operational.\n  - STOPPING\tThe managed entity is in the transition to stop.\n  - STARTING\tThe managed entity is in the transition to start and become operational.\n  - RESTARTING\tThe managed entity is in the transition to stop and start again.\n",
					"type": "string",
					"enum": ["STARTED", "STOPPED", "STOPPING", "STARTING", "RESTARTING"]
				},
				"administrativeState": {
					"description": "The enumeration AdministrativeStateEnumType defines values representing the administrative state of a managed entity. The AdministrativeStateEnumType shall comply with the provisions:\n  - LOCKED\tThe managed entity is administratively prohibited to be used.\n  - UNLOCKED\tThe managed entity is administratively allowed to be used.\n  - LOCKING\tThe managed entity is in the transition to be locked.\n",
					"type": "string",
					"enum": ["LOCKED", "UNLOCKED", "LOCKING"]
				},
				"usageState": {
					"description": "The enumeration UsageStateEnumType defines values representing the usage state of a managed entity. The UsageStateEnumType shall comply with the provisions:\n  - IN_USE\tThe managed entity is currently being used.\n  - NOT_IN_USE\tThe managed entity is currently not being used.\n",
					"type": "string",
					"enum": ["IN_USE", "NOT_IN_USE"]
				}
			}
		},
		"nfvoSpecificInfo": {
			"description": "This type represents information attributes specific to an NFVO entity, and that can be relevant to more than one NFV-MANO service offered by an NFVO entity. * NOTE 1:\tThe information to be provided in this attribute shall relate to the specification and version\n            of the specification. For instance, \"ETSI GS NFV-SOL 001 (V2.5.1)\".\n  NOTE 2:\tIf this attribute is not present, the value of this parameter is undefined.\n",
			"type": "object",
			"required": ["supportedVnfdFormats", "supportedNsdFormats"],
			"properties": {
				"maxOnboardedNsdNum": {
					"description": "Maximum number of NSDs that can be on-boarded on the NFVO. See note 2.\n",
					"type": "integer"
				},
				"maxOnboardedVnfPkgNum": {
					"description": "Maximum number of VNF Packages that can be on-boarded on the NFVO. See note 2.\n",
					"type": "integer"
				},
				"supportedVnfdFormats": {
					"description": "Supported VNFD data formats.\n",
					"type": "object",
					"properties": {
						"vnfdFormat": {
							"description": "Name of the VNFD format.\nPermitted values:\n  - TOSCA: The VNFD follows TOSCA definition, according to ETSI\n  GS NFV-SOL 001 standard.\n  - YANG: The VNFD follows YANG definition according to ETSI\n  GS NFV-SOL 006 standard.\n",
							"type": "string",
							"enum": ["TOSCA", "YANG"]
						},
						"standardVersion": {
							"description": "A version.\n",
							"type": "string"
						}
					},
					"required": ["vnfdFormat", "standardVersion"]
				},
				"supportedNsdFormats": {
					"description": "Supported NSD data formats.\n",
					"type": "object",
					"properties": {
						"nsdFormat": {
							"description": "Name of the NSD format.\nPermitted values:\n  - TOSCA: The VNFD follows TOSCA definition, according to ETSI\n  GS NFV-SOL 001 standard.\n  - YANG: The VNFD follows YANG definition according to ETSI\n  GS NFV-SOL 006 standard.\n",
							"type": "string",
							"enum": ["TOSCA", "YANG"]
						},
						"standardVersion": {
							"description": "A version.\n",
							"type": "string"
						}
					},
					"required": ["nsdFormat", "standardVersion"]
				}
			}
		},
		"vnfmSpecificInfo": {
			"description": "This type represents information attributes specific to a VNFM entity, and that can be relevant to more than one NFV-MANO service offered by a VNFM entity. * NOTE:\tThe information to be provided in this attribute shall relate to the specification and version\n        of the specification. For instance, \"ETSI GS NFV-SOL 001 (V2.5.1)\".\n",
			"type": "object",
			"required": ["resoruceMgmtModeSupport", "managedVnfInstanceInfos", "supportedVnfdFormats"],
			"properties": {
				"resoruceMgmtModeSupport": {
					"description": "The supported resource management modes of the VNFM.\nPermitted values:\n  - DIRECT: The VNFM supports direct mode only.\n  - INDIRECT: The VNFM supports indirect mode only.\n  - BOTH: The VNFM supports both direct and indirect mode.\n",
					"type": "string",
					"enum": ["DIRECT", "INDIRECT", "BOTH"]
				},
				"managedVnfInstanceInfos": {
					"description": "The kinds of VNF instances that can be managed, e.g. to determine the compatibility of a VNF with certain VNFM according to the vnfmInfo attribute in the VNFD (see table 7.1.2.2-1 in ETSI GS NFV-IFA 011).\n",
					"type": "array",
					"items": {
						"type": "string"
					},
					"minItems": 1
				},
				"supportedVnfdFormats": {
					"description": "Supported VNFD data formats.\n",
					"type": "array",
					"items": {
						"type": "object",
						"properties": {
							"vnfdFormat": {
								"description": "Name of the VNFD format.\nPermitted values:\n  - TOSCA: The VNFD follows TOSCA definition, according to ETSI\n  GS NFV-SOL 001 standard.\n  - YANG: The VNFD follows YANG definition according to ETSI\n  GS NFV-SOL 006 standard.\n",
								"type": "string",
								"enum": ["TOSCA", "YANG"]
							},
							"standardVersion": {
								"description": "A version.\n",
								"type": "string"
							}
						},
						"required": ["vnfdFormat", "standardVersion"]
					},
					"minItems": 1
				}
			}
		},
		"vimSpecificInfo": {
			"description": "This type represents information attributes specific to a VIM entity, and that can be relevant to more than one NFV MANO service offered by a VIM entity. It shall comply with the provisions defined in table 5.6.3.6-1. The present document version does not specify the support for \"maximum number of virtualised resources (attribute \"maxVirtualResourceNum\")\" as specified in clause 7.2.9.2 of ETSI GS NFV IFA 031 [1].\nNOTE:\tRecommendations on appropriate algorithms and key lengths are given e.g., in NIST Special Publication 800-57 Part 3 Revision 1 [i.26] or in documents related to local legislation.\n",
			"type": "object",
			"required": ["imageContainerFormats", "imageDiskFormats", "imageSignatureVerification", "imageDigestAlgorithms"],
			"properties": {
				"imageContainerFormats": {
					"description": "List of supported image container formats. Container format indicates whether a software image is in a file that also contains metadata about the actual software. Valid values are all values for \"container_format\" as defined in ETSI GS NFV-SOL 001 [i.16] and all values for \"container-format\" as defined in ETSI GS NFV-SOL 006 [i.17].\n",
					"type": "array",
					"items": {
						"type": "string"
					}
				},
				"imageDiskFormats": {
					"description": "List of supported image disk formats. The Disk format of a software image is the format of the underlying disk image. Valid values are all values for \"disk_format\" as defined in ETSI GS NFV-SOL 001 [16] and all values of \"disk-format\" as defined in ETSI GS NFV-SOL 006 [i.17].\n",
					"type": "array",
					"items": {
						"type": "string"
					}
				},
				"imageSignatureVerification": {
					"description": "Information about the supported mechanisms, algorithms, and protocols for verifying the signature of software images.\n",
					"type": "object",
					"required": ["signatureVerificationAlgorithms"],
					"properties": {
						"additionalVerificationCapabilities": {
							"description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
							"type": "object"
						},
						"signatureVerificationAlgorithms": {
							"description": "List of algorithms for verifying the signature of software images that are supported by the VIM.\n",
							"type": "array",
							"items": {
								"type": "object",
								"required": ["algorithm", "keyLengths"],
								"properties": {
									"algorithm": {
										"description": "The name of the algorithm. Permitted values are: \"RSA\", \"DSA\", \"ECDSA\".\n",
										"type": "string"
									},
									"keyLengths": {
										"description": "List of supported key lengths of the algorithm. The key length indicates the number of bits, such as “256”, “512”, etc. See note.\n",
										"type": "array",
										"items": {
											"type": "string"
										}
									},
									"additionalAlgParams": {
										"description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
										"type": "object"
									}
								}
							}
						}
					}
				},
				"imageDigestAlgorithms": {
					"description": "List of supported digest algorithms that can be used for digital signatures.\n",
					"type": "array",
					"items": {
						"type": "object",
						"required": ["algorithm", "keyLengths"],
						"properties": {
							"algorithm": {
								"description": "The name of the algorithm. Permitted values are: “SHA2“,“SHA3“.\n",
								"type": "string"
							},
							"keyLengths": {
								"description": "List of supported key lengths of the algorithm. The key length indicates the number of bits, such as “256”, “512”, etc. See note.\n",
								"type": "array",
								"items": {
									"type": "string"
								}
							}
						}
					}
				}
			}
		},
		"wimSpecificInfo": {
			"description": "This type represents information attributes specific to a WIM entity, and that can be relevant to more than one NFV MANO service offered by a WIM entity.\n",
			"type": "object",
			"required": ["maxMscsNums", "maxMsncNum", "mscsLayerProtocolSupport"],
			"properties": {
				"maxMscsNums": {
					"description": "Maximum number of MSCS that the WIM can manage.\n",
					"type": "object",
					"required": ["numMscs"],
					"properties": {
						"numMscs": {
							"description": "Maximum number of MSCS.\n",
							"type": "integer"
						},
						"criteriaNumMscs": {
							"description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
							"type": "object"
						}
					}
				},
				"maxMsncNum": {
					"description": "Maximum number of MSNC that the WIM can manage\n",
					"type": "object",
					"required": ["numMsnc"],
					"properties": {
						"numMsnc": {
							"description": "Maximum number of MSNC..\n",
							"type": "integer"
						},
						"criteriaNumMsnc": {
							"description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
							"type": "object"
						}
					}
				},
				"mscsLayerProtocolSupport": {
					"description": "List of protocols of particular layers used to realize an MSCS that are supported by the WIM.\nPermitted values:  - EVPN_BGP_MPLS: L2 MSCS realized by BGP MPLS-based Ethernet VPN (EVPN) as specified in IETF RFC 7432.\n  - EVPN_VPWS: L2 MSCS realized by EVPN Virtual Private Wire Service (VPWS) as specified in IETF RFC 8214.\n  - VPLS_BGP: L2 MSCS realized by Virtual Private LAN Service (VPLS) using BGP as specified\n    in IETF RFC 4761 and IETF RFC.\n  - VPLS_LDP_L2TP: L2 MSCS realized by VPLS using Label Distribution Protocol (LDP) Layer 2\n    Tunnelling Protocol (L2TP) as specified in IETF RFC 4762 and IETF RFC 6074.\n  - VPWS_LDP_L2TP: L2 MSCS realized by VPWS using LDP L2TP as specified in IETF RFC 6074.\n  - BGP_IP_VPN: L3 MSCS realized by BGP/MPLS based IP VPN as specified in IETF RFC 4364.\n",
					"type": "string",
					"enum": ["EVPN_BGP_MPLS", "EVPN_VPWS", "VPLS_BGP", "VPLS_LDP_L2TP", "VPWS_LDP_L2TP", "BGP_IP_VPN"]
				}
			}
		},
		"_links": {
			"description": "Links to resources related to this resource.\n",
			"type": "object",
			"required": ["self", "manoServiceInterfaces", "peerEntities", "changeState", "changeStateOpOccs"],
			"properties": {
				"self": {
					"description": "This type represents a link to a resource using an absolute URI.\n",
					"type": "object",
					"required": ["href"],
					"properties": {
						"href": {
							"description": "String formatted according to IETF RFC 3986.\n",
							"type": "string"
						}
					}
				},
				"manoServiceInterfaces": {
					"description": "This type represents a link to a resource using an absolute URI.\n",
					"type": "object",
					"required": ["href"],
					"properties": {
						"href": {
							"description": "String formatted according to IETF RFC 3986.\n",
							"type": "string"
						}
					}
				},
				"peerEntities": {
					"description": "This type represents a link to a resource using an absolute URI.\n",
					"type": "object",
					"required": ["href"],
					"properties": {
						"href": {
							"description": "String formatted according to IETF RFC 3986.\n",
							"type": "string"
						}
					}
				},
				"changeState": {
					"description": "This type represents a link to a resource using an absolute URI.\n",
					"type": "object",
					"required": ["href"],
					"properties": {
						"href": {
							"description": "String formatted according to IETF RFC 3986.\n",
							"type": "string"
						}
					}
				},
				"changeStateOpOccs": {
					"description": "This type represents a link to a resource using an absolute URI.\n",
					"type": "object",
					"required": ["href"],
					"properties": {
						"href": {
							"description": "String formatted according to IETF RFC 3986.\n",
							"type": "string"
						}
					}
				}
			}
		}
	}
}