openapi: 3.0.1
info:
  title: OpenAPI definition
  version: v0
servers:
- url: https://localhost:9443
  description: Generated server url
tags:
- name: task
  description: Task Controller
- name: login
  description: Login Controller
- name: environment
  description: Lifecycle Management Environment Controller
- name: product
  description: Lifecycle Management Product Controller
- name: about
  description: About CP LCM
paths:
  /api/v1/task/{taskId}:
    get:
      tags:
      - task
      summary: Get a specific task.
      operationId: getTask
      parameters:
      - name: taskId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Task'
        "200":
          description: Details of requested tasks.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Task'
    put:
      tags:
      - task
      summary: Cancel or restart a task.
      operationId: updateTask
      parameters:
      - name: taskId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - name: action
        in: query
        required: true
        schema:
          pattern: ^(cancel)|(restart)$
          type: string
      responses:
        "200":
          description: Task ID for the task to cancel.
        "404":
          description: Task doesn't exist
        "401":
          description: Unauthorized access
  /api/v1/lcm/environment/{environmentId}/product/{productId}/upgrade:
    put:
      tags:
      - product
      summary: Upgrade a deployed product in an LCM environment.
      operationId: upgradeProduct
      parameters:
      - name: action
        in: query
        required: false
        schema:
          type: string
          default: VALIDATE
          enum:
          - UPGRADE
          - VALIDATE
      - name: ignoreValidation
        in: query
        required: false
        schema:
          type: boolean
          default: false
      - name: disableRollback
        in: query
        required: false
        schema:
          type: boolean
          default: false
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductUpgradeSpec'
        required: true
      responses:
        "200":
          description: Task ID for the task updating the product.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
  /api/v1/lcm/environment/{environmentId}/product/{productId}/node/{nodeId}:
    get:
      tags:
      - product
      summary: Get a product node by node id.
      operationId: getProductNodeSpecById
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - name: nodeId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: One product node.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProductNodeSpec'
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProductNodeSpec'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProductNodeSpec'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProductNodeSpec'
    put:
      tags:
      - product
      summary: Redeploy a product node by node id.
      operationId: redeployProductNode
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - name: nodeId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: force
        in: query
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "405":
          description: "Product does not support redeployment of nodes. In order to\
            \ redeploy, delete the product from the environment or the entire environment."
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "200":
          description: Task ID for the task that redeploys a product node.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
    delete:
      tags:
      - product
      summary: Delete a product node by node id.
      operationId: deleteProductNode
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - name: nodeId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: force
        in: query
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "405":
          description: "Product does not support deletion of nodes. In order to delete\
            \ the single node, delete the product or the entire environment"
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "200":
          description: Task ID for the task that deletes a product node.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
    patch:
      tags:
      - product
      summary: Update a product node by node id.
      operationId: updateProductNode
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - name: nodeId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: ignoreValidation
        in: query
        required: false
        schema:
          type: boolean
          default: false
      - name: force
        in: query
        required: false
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductUpdateNodeSpec'
        required: true
      responses:
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "200":
          description: Task ID for the task that updates a product node.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
  /api/v1/lcm/environment/{environmentId}/product/{productId}/certificate:
    get:
      tags:
      - product
      summary: Get product certificate's details.
      operationId: getCertificate
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Product certificate's details.
          content:
            '*/*':
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/CertificateSpec'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/CertificateSpec'
    put:
      tags:
      - product
      summary: Update a product certificate.
      operationId: configureCertificate
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/CertificateSpec'
        required: true
      responses:
        "200":
          description: Task ID for the task updating a product certificate.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product certificate spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
  /api/v1/session:
    post:
      tags:
      - login
      summary: Perform login with specified credentials and generate session token.
      operationId: login
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginCredentials'
        required: true
      responses:
        "200":
          description: Session ID for logged in user.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/LoginResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/LoginResponse'
  /api/v1/lcm/environment:
    get:
      tags:
      - environment
      summary: Get all deployed LCM environments.
      operationId: getEnvironmentList
      responses:
        "200":
          description: List of LCM environments.
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnvironmentSpec'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnvironmentSpec'
    post:
      tags:
      - environment
      summary: Create a new LCM environment by deploying the specified products.
      operationId: createEnvironment
      parameters:
      - name: action
        in: query
        required: false
        schema:
          type: string
          default: VALIDATE
          enum:
          - DEPLOY
          - IMPORT
          - VALIDATE
      - name: ignoreValidation
        in: query
        required: false
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnvironmentSpec'
        required: true
      responses:
        "400":
          description: Invalid environment spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "200":
          description: Task ID for the task creating the environment.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
  /api/v1/lcm/environment/{environmentId}/product/{productId}/node:
    get:
      tags:
      - product
      summary: Get all product nodes.
      operationId: getAllProductNodes
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: List of product nodes.
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductNodeSpec'
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductNodeSpec'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductNodeSpec'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductNodeSpec'
    post:
      tags:
      - product
      summary: Create a new product node.
      operationId: addProductNode
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - name: disableRollback
        in: query
        required: false
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductNodeSpec'
        required: true
      responses:
        "405":
          description: The number of deployed nodes reached the allowed maximum
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "404":
          description: Environment or product doesn't exist
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "200":
          description: Task ID for the task that adds a new product node.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "400":
          description: Invalid product node spec
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TaskResponse'
  /api/v1/task:
    get:
      tags:
      - task
      summary: Get all task for CP LCM requests.
      operationId: getTasks
      responses:
        "200":
          description: List of tasks.
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
  /api/v1/lcm/environment/{environmentId}:
    get:
      tags:
      - environment
      summary: Get a deployed LCM environment by ID.
      operationId: getEnvironment
      parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
      responses:
        "404":
          description: Requested environment not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EnvironmentSpec'
        "200":
          description: Details of LCM environment.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EnvironmentSpec'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EnvironmentSpec'
  /api/about:
    get:
      tags:
      - about
      summary: Show version information for CP LCM.
      operationId: getAbout
      responses:
        "200":
          description: Version information for CP LCM
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/About'
        "401":
          description: Unauthorized access
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/About'
components:
  schemas:
    ProductUpgradeSpec:
      required:
      - upgradeDetails
      type: object
      properties:
        upgradeDetails:
          $ref: '#/components/schemas/UpgradeDetailsSpec'
    UpgradeDetailsSpec:
      required:
      - targetVersion
      type: object
      properties:
        targetVersion:
          type: string
        additionalProperties:
          type: object
          additionalProperties:
            type: object
    TaskResponse:
      required:
      - taskId
      type: object
      properties:
        taskId:
          type: string
    CertificateSpec:
      required:
      - certificate
      type: object
      properties:
        certificate:
          pattern: "^(-----BEGIN CERTIFICATE-----\\n[A-Za-z0-9+/\r\n]+={0,2}\\n-----END\
            \ CERTIFICATE-----(\\n?))+$"
          type: string
          description: Certificate (single or chain) in PEM format.
        privateKey:
          pattern: "^-----BEGIN RSA PRIVATE KEY-----\\n[A-Za-z0-9+/\r\n]+={0,2}\\\
            n-----END RSA PRIVATE KEY-----(\\n?)$"
          type: string
          description: Private key in PEM format.
        validFrom:
          type: string
        validTo:
          type: string
        thumbprint:
          type: string
    LoginCredentials:
      required:
      - password
      - username
      type: object
      properties:
        username:
          type: string
        password:
          type: string
    LoginResponse:
      type: object
      properties:
        jsessionID:
          type: string
    VcdIntegrationSpec:
      required:
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
      anyOf:
      - $ref: '#/components/schemas/VcdNsxtIntegration'
      - $ref: '#/components/schemas/VcdRmqIntegration'
      - $ref: '#/components/schemas/VcdVcenterIntegration'
    UsageIntegrationSpec:
      required:
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
      anyOf:
      - $ref: '#/components/schemas/UsageNsxtIntegration'
      - $ref: '#/components/schemas/UsageVcdIntegration'
      - $ref: '#/components/schemas/UsageVcenterIntegration'
      - $ref: '#/components/schemas/UsageVropsIntegration'
    VropstaIntegrationSpec:
      required:
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
      anyOf:
      - $ref: '#/components/schemas/VropstaVcdIntegration'
      - $ref: '#/components/schemas/VropstaVropsIntegration'
    RmqIntegrationSpec:
      required:
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
    BaseIntegrationSpec:
      required:
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
      anyOf:
      - $ref: '#/components/schemas/VropstaVcdIntegration'
      - $ref: '#/components/schemas/VropstaVropsIntegration'
      - $ref: '#/components/schemas/UsageNsxtIntegration'
      - $ref: '#/components/schemas/UsageVcdIntegration'
      - $ref: '#/components/schemas/UsageVcenterIntegration'
      - $ref: '#/components/schemas/UsageVropsIntegration'
      - $ref: '#/components/schemas/VcdNsxtIntegration'
      - $ref: '#/components/schemas/VcdRmqIntegration'
      - $ref: '#/components/schemas/VcdVcenterIntegration'
    DeploymentInfrastructure:
      required:
      - vcenter
      type: object
      properties:
        vcenter:
          $ref: '#/components/schemas/VcenterSpec'
        nsxt:
          $ref: '#/components/schemas/NsxtSpec'
    EnvironmentSpec:
      required:
      - deploymentInfrastructures
      - environmentName
      - products
      type: object
      properties:
        environmentName:
          type: string
          description: "Name of an environment. If no ID is specified, this name will\
            \ be normalized and used as ID."
        environmentId:
          type: string
          description: ID of an environment.
        environmentState:
          type: string
        products:
          type: array
          items:
            $ref: '#/components/schemas/ProductSpec'
        deploymentInfrastructures:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/DeploymentInfrastructure'
    NetworkSpec:
      required:
      - gateway
      - portGroupName
      - subnetMask
      type: object
      properties:
        portGroupName:
          type: string
          description: vCenter port group name.
        gateway:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: Gateway to be used for network's subnet.
        subnetMask:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: Subnet mask to be used for network's subnet.
        domainName:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Domain name to be used for network's subnet.
        searchPath:
          type: array
          description: Domain search path to be used for network's subnet.
          items:
            type: string
            description: Domain search path to be used for network's subnet.
        useDhcp:
          type: boolean
          description: Flag indicating whether to use DHCP in the subnet.
        dns:
          type: array
          description: List of DNS servers for network's subnet.
          items:
            type: string
            description: List of DNS servers for network's subnet.
        ntp:
          type: array
          description: List of NTP servers for network's subnet.
          items:
            type: string
            description: List of NTP servers for network's subnet.
      description: List of networks (defining port groups and related subnets) used
        for deployments.
    NicSpec:
      required:
      - ipAddress
      - networkName
      type: object
      properties:
        ipAddress:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: IP address to set for the NIC.
        networkName:
          type: string
          description: "Name of the network defined in the deployment infrastructure's\
            \ vCenter networks. Note: This is not a VC port group but refers to the\
            \ definition of the network that specifies the port group."
        staticRoutes:
          type: array
          description: List of static routes to configure for the NIC.
          items:
            type: string
            description: List of static routes to configure for the NIC.
      description: List of NICs to configure for the VM.
    NsxtSpec:
      required:
      - nsxCliPassword
      - nsxManagerIp
      - nsxRootPassword
      - nsxVip
      type: object
      properties:
        nsxVip:
          type: string
        nsxManagerIp:
          type: string
        nsxRootPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
        nsxCliPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
    ProductNodeSpec:
      required:
      - hostName
      - nics
      - rootPassword
      - vmName
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        nodeId:
          type: integer
          format: int32
        cpuNum:
          minimum: 1
          type: integer
          description: Number of CPUs to configure the VM with.
          format: int32
        ramMemory:
          minimum: 1024
          type: integer
          description: Memory size (in MB) to configure the VM with.
          format: int32
        hostName:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname of the node.
        vmName:
          pattern: "^[a-zA-Z0-9][a-zA-Z0-9\\-_.()\\[\\]{}]{0,79}$"
          type: string
          description: VM name of the node.
        deploymentOption:
          type: string
          description: Deployment option of the VM (values depend on the product's
            OVF properties).
        nics:
          type: array
          description: List of NICs to configure for the VM.
          items:
            $ref: '#/components/schemas/NicSpec'
        datastoreName:
          type: string
          description: "Datastore to use for the VM. If not defined, the first datastore\
            \ of specified deployment infrastructure vCenter will be used."
        clusterName:
          type: string
          description: "vCenter cluster name to use for the VM. If not defined, the\
            \ cluster defined for specified deployment infrastructure vCenter will\
            \ be used."
        resourcePool:
          type: string
          description: "vCenter resource pool name to use for the VM. If not defined,\
            \ the resource pool defined for specified deployment infrastructure vCenter\
            \ will be used."
        datacenterName:
          type: string
          description: "Datacenter name to use for the VM. If not defined, the datacenter\
            \ defined for specified deployment infrastructure vCenter will be used."
        rootPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: The password for root user (or similar admin user depending
            on OS).
        gateway:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: "The gateway to configure for the VM. If not set, the value\
            \ of the first NIC's network will be used."
      description: List of nodes for the product
    ProductSpec:
      required:
      - adminPassword
      - nodes
      - productId
      - productType
      - version
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        infraReference:
          type: string
        productType:
          type: string
          description: "Product type, defining the type of application to integrate\
            \ with (VCD, USAGE, RMQ, VROPSTA)."
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
        productId:
          type: string
        version:
          pattern: "^[0-9]+(\\.[0-9]+){0,3}(-[a-zA-Z0-9]+)?$"
          type: string
          description: Version of the product to deploy or import.
        license:
          pattern: "^([a-zA-Z0-9]{5}-){4}[a-zA-Z0-9]{5}$"
          type: string
          description: License for the product
        adminPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Admin password for the product's administrator account
        nodes:
          type: array
          description: List of nodes for the product
          items:
            $ref: '#/components/schemas/ProductNodeSpec'
        integrations:
          type: array
          description: List of integrations to configure for the product
          items:
            $ref: '#/components/schemas/BaseIntegrationSpec'
        certificate:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/CertificateSpec'
          description: Certificates for the product
      anyOf:
      - $ref: '#/components/schemas/VcdProductSpec'
      - $ref: '#/components/schemas/UsageProductSpec'
      - $ref: '#/components/schemas/VropstaProductSpec'
      - $ref: '#/components/schemas/RmqProductSpec'
    RmqProductSpec:
      required:
      - adminPassword
      - nodes
      - productId
      - productType
      - version
      type: object
      properties:
        properties:
          type: object
          properties:
            diskMode:
              pattern: ^thin|thick|eagerZeroedThick$
              type: string
              description: "The mode to use for creating the virtual disk of the VM\
                \ (thin, thick, eagerZeroedThick). Default: thin"
            lbName:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: The name of the load balancer for RabbitMQ.
            lbFqdn:
              pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
                -]*[a-zA-Z0-9])?$"
              type: string
              description: The FQDN of the load balancer for RabbitMQ.
            lbIp:
              pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
              type: string
              description: The IP address of the load balancer for RabbitMQ.
            portAmqpSsl:
              pattern: "^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([1-9][0-9]{0,3}))$"
              type: string
              description: "Port to be configured for AMQP ssl service. Default: 5671"
            portRmqMgmt:
              pattern: "^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([1-9][0-9]{0,3}))$"
              type: string
              description: "Port to be configured for RabbitMQ management service.\
                \ Default: 15671"
            users:
              type: array
              description: List of user accounts to be created in RabbitMQ
              items:
                $ref: '#/components/schemas/VcplcmRmqUserProperties'
        infraReference:
          type: string
        productType:
          type: string
          description: "Product type, defining the type of application to integrate\
            \ with (VCD, USAGE, RMQ, VROPSTA)."
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
        productId:
          type: string
        version:
          pattern: "^[0-9]+(\\.[0-9]+){0,3}(-[a-zA-Z0-9]+)?$"
          type: string
          description: Version of the product to deploy or import.
        license:
          pattern: "^([a-zA-Z0-9]{5}-){4}[a-zA-Z0-9]{5}$"
          type: string
          description: License for the product
        adminPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Admin password for the product's administrator account
        nodes:
          type: array
          description: List of nodes for the product
          items:
            $ref: '#/components/schemas/ProductNodeSpec'
        integrations:
          type: array
          description: List of integrations to configure for the product
          items:
            $ref: '#/components/schemas/RmqIntegrationSpec'
        certificate:
          type: object
          properties:
            product:
              $ref: '#/components/schemas/CertificateSpec'
    UsageNsxtIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    UsageProductSpec:
      required:
      - adminPassword
      - nodes
      - productId
      - productType
      - version
      type: object
      properties:
        properties:
          type: object
          properties:
            diskMode:
              pattern: ^thin|thick|eagerZeroedThick$
              type: string
              description: "The mode to use for creating the virtual disk of the VM\
                \ (thin, thick, eagerZeroedThick). Default: thin"
            auditorPassword:
              pattern: "^[^'\"]{2,24}$"
              type: string
              description: "The password to be used for auditor password. If not defined,\
                \ the admin password will be used."
            proxy:
              $ref: '#/components/schemas/VcplcmUmProxyProperties'
        infraReference:
          type: string
        productType:
          type: string
          description: "Product type, defining the type of application to integrate\
            \ with (VCD, USAGE, RMQ, VROPSTA)."
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
        productId:
          type: string
        version:
          pattern: "^[0-9]+(\\.[0-9]+){0,3}(-[a-zA-Z0-9]+)?$"
          type: string
          description: Version of the product to deploy or import.
        license:
          pattern: "^([a-zA-Z0-9]{5}-){4}[a-zA-Z0-9]{5}$"
          type: string
          description: License for the product
        adminPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Admin password for the product's administrator account
        nodes:
          type: array
          description: List of nodes for the product
          items:
            $ref: '#/components/schemas/ProductNodeSpec'
        integrations:
          type: array
          items:
            $ref: '#/components/schemas/UsageIntegrationSpec'
        certificate:
          type: object
          properties:
            product:
              $ref: '#/components/schemas/CertificateSpec'
    UsageVcdIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        productId:
          type: string
          description: ID of the integration.
        productType:
          type: string
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
    UsageVcenterIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            externalSSO:
              type: boolean
              description: "Use an external Platform Service Controller (PSC) for\
                \ authentication. Note: External PSC is currently not supported in\
                \ VCP LCM, so default value is: false"
            vcfEdition:
              pattern: ^None|Basic|Standard|Enterprise$
              type: string
              description: "The VCF edition to configure for vCenter collector (possible\
                \ values: None, Basic, Standard, Enterprise). Default: None"
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    UsageVropsIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            vcReferences:
              type: array
              description: A list of vCenter integration IDs (refering to a vCenter
                integration configured as VC collector in UM). This will be used to
                identify the auto discovered vROPS collector in UM.
              items:
                type: string
                description: A list of vCenter integration IDs (refering to a vCenter
                  integration configured as VC collector in UM). This will be used
                  to identify the auto discovered vROPS collector in UM.
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    VcdNsxtIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            networkPools:
              type: object
              additionalProperties:
                type: string
                description: "Network pools, mapping VCD network pool name to NSXT\
                  \ transport zone."
              description: "Network pools, mapping VCD network pool name to NSXT transport\
                \ zone."
            vcdExternalNetworks:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/VcdNsxtIntegrationPropertiesExtNw'
              description: External networks
            nsxt_id:
              pattern: "^urn:vcloud:[0-9a-z]+:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
              type: string
              description: VCD URN identifying the NSXT instance.
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    VcdNsxtIntegrationPropertiesExtNw:
      type: object
      properties:
        subnets:
          type: array
          description: List of subnets for external network.
          items:
            $ref: '#/components/schemas/VcdNsxtIntegrationPropertiesExtNwSubnet'
        description:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: External network description.
        tier0Name:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Name of Tier 0 gateway this external network is backed by.
        tier0backingId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of Tier 0 gateway this external network is backed by.
        backingType:
          pattern: ^NSXT_TIER0|NSXT_VRF_TIER0|NETWORK|DV_PORTGROUP$
          type: string
          description: The backing type of this external network.
      description: External networks
    VcdNsxtIntegrationPropertiesExtNwSubnet:
      type: object
      properties:
        gateway:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: The gateway defined for the external network.
        prefixLength:
          maximum: 31
          minimum: 1
          type: integer
          description: The subnet prefix for the external network
          format: int32
        dnsSuffix:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: The DNS suffix for the external network.
        dnsServer1:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: The first DNS server for the external network.
        dnsServer2:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: The second DNS server for the external network.
        ipRanges:
          type: array
          description: List of IP ranges for the external network.
          items:
            $ref: '#/components/schemas/VcdNsxtIntegrationPropertiesExtNwSubnetIpRange'
      description: List of subnets for external network.
    VcdNsxtIntegrationPropertiesExtNwSubnetIpRange:
      type: object
      properties:
        startAddress:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: Start address (IP v4) of IP range.
        endAddress:
          pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
          type: string
          description: End address (IP v4) of IP range.
      description: List of IP ranges for the external network.
    VcdProductPublicAddressProperties:
      type: object
      properties:
        restApiBaseUri:
          pattern: "^(?:(http|https)://)?([a-zA-Z0-9-._]+)(?::([0-9]+))?(/[a-zA-Z0-9-._/]+)*(\\\
            ?([^=&\n]+=[^=&\n]+)(?:&(?:amp;)?([^=&\n]+=[^=&\n]+))*)?$"
          type: string
          description: The URL to be used for public access to VCD REST API (https)
        restApiBaseHttpUri:
          pattern: "^(?:(http|https)://)?([a-zA-Z0-9-._]+)(?::([0-9]+))?(/[a-zA-Z0-9-._/]+)*(\\\
            ?([^=&\n]+=[^=&\n]+)(?:&(?:amp;)?([^=&\n]+=[^=&\n]+))*)?$"
          type: string
          description: The URL to be used for public access to VCD REST API (http)
        tenantPortalExternalAddress:
          pattern: "^(?:(http|https)://)?([a-zA-Z0-9-._]+)(?::([0-9]+))?(/[a-zA-Z0-9-._/]+)*(\\\
            ?([^=&\n]+=[^=&\n]+)(?:&(?:amp;)?([^=&\n]+=[^=&\n]+))*)?$"
          type: string
          description: The URL to be used for public access to tenant portal (https)
        tenantPortalExternalHttpAddress:
          pattern: "^(?:(http|https)://)?([a-zA-Z0-9-._]+)(?::([0-9]+))?(/[a-zA-Z0-9-._/]+)*(\\\
            ?([^=&\n]+=[^=&\n]+)(?:&(?:amp;)?([^=&\n]+=[^=&\n]+))*)?$"
          type: string
          description: The URL to be used for public access to tenant portal (http)
        consoleProxyExternalAddress:
          pattern: "^(?:(http|https)://)?([a-zA-Z0-9-._]+)(?::([0-9]+))?(/[a-zA-Z0-9-._/]+)*(\\\
            ?([^=&\n]+=[^=&\n]+)(?:&(?:amp;)?([^=&\n]+=[^=&\n]+))*)?$"
          type: string
          description: The address to be configured for public access to VCD console
            proxy.
    VcdProductSpec:
      required:
      - adminPassword
      - nodes
      - productId
      - productType
      - version
      type: object
      properties:
        properties:
          required:
          - dbPassword
          - nfsMount
          type: object
          properties:
            installationId:
              maximum: 63
              minimum: 1
              type: integer
              description: "The installation ID is used to generate unique MAC addresses\
                \ for VMs running in the VCD instance. Default: 1"
              format: int32
            systemName:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: "The system name is used for the vCenter Server folder\
                \ to create for this vCloud Director installation. Default: vcd1"
            dbPassword:
              pattern: "^[^'\"]{2,24}$"
              type: string
              description: The password to use for the integrated VCD Postgres database.
            adminEmail:
              pattern: "^[a-zA-Z0-9\\._\\-]+@[a-zA-Z0-9\\._\\-]+\\.[a-zA-Z0-9]{2,}$"
              type: string
              description: The email address of the system administrator.
            adminFullName:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: "The full name of the system administrator. Default: vCD\
                \ Admin"
            adminUsername:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: "The username to use for the system administrator. Default:\
                \ administrator"
            nfsMount:
              pattern: "^[^;'\":]+:(\\/[^;'\":]*)+$"
              type: string
              description: "The NFS share to be used for VCD cells transfer storage.\
                \ Format: nfs_ip_address:nfs_mount_path"
            deploymentOption:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: "The deployment option to use for the VCD cell (‘primary-large’\
                , ‘standby-large’, ‘primary-small’, ‘standby-small’, ‘cell’, ‘large’\
                , ‘small). Default: primary-large"
            diskMode:
              pattern: ^thin|thick|eagerZeroedThick$
              type: string
              description: "The mode to use for creating the virtual disk of the VM\
                \ (thin, thick, eagerZeroedThick). Default: thin"
            enableSsh:
              type: boolean
              description: "Option to enable or disable SSH for VCD cells. Default:\
                \ true"
            expireRootPassword:
              type: boolean
              description: "Option to enable prompt for a new root password after\
                \ deployment. Default: false"
            clusterFailoverMode:
              pattern: AUTOMATIC|MANUAL
              type: string
              description: "The VCD database cluster failover mode. Note: This cannot\
                \ be configured by VCP LCM in version 1.1.0. Instead, it is discovered\
                \ only from the environment."
            keystorePassword:
              pattern: "^[^'\"]{2,24}$"
              type: string
              description: The store password used for creating certificate keystore.
            publicAddress:
              $ref: '#/components/schemas/VcdProductPublicAddressProperties'
        infraReference:
          type: string
        productType:
          type: string
          description: "Product type, defining the type of application to integrate\
            \ with (VCD, USAGE, RMQ, VROPSTA)."
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
        productId:
          type: string
        version:
          pattern: "^[0-9]+(\\.[0-9]+){0,3}(-[a-zA-Z0-9]+)?$"
          type: string
          description: Version of the product to deploy or import.
        license:
          pattern: "^([a-zA-Z0-9]{5}-){4}[a-zA-Z0-9]{5}$"
          type: string
          description: License for the product
        adminPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Admin password for the product's administrator account
        nodes:
          type: array
          description: List of nodes for the product
          items:
            $ref: '#/components/schemas/ProductNodeSpec'
        integrations:
          type: array
          items:
            $ref: '#/components/schemas/VcdIntegrationSpec'
        certificate:
          type: object
          properties:
            product:
              $ref: '#/components/schemas/CertificateSpec'
            management:
              $ref: '#/components/schemas/CertificateSpec'
            restApi:
              $ref: '#/components/schemas/CertificateSpec'
            tenantPortal:
              $ref: '#/components/schemas/CertificateSpec'
    VcdRmqIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            amqpExchange:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: AMQP exchange name.
            amqpVHost:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: AMQP virtual host.
            amqpUseSSL:
              type: boolean
              description: Use SSL for AMQP connection.
            amqpSslAcceptAll:
              type: boolean
              description: Auto accept AMQP servers ssl certificate.
            amqpPrefix:
              pattern: "^[^;'\"]{1,80}$"
              type: string
              description: AMQP prefix.
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        productId:
          type: string
          description: ID of the integration.
        productType:
          type: string
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
    VcdVcenterIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            providerVdcs:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/VcdVcenterIntegrationPropertiesPvdc'
              description: "Provider VDCs to create - key: PVDC name, value: definition\
                \ of PVDC."
            vc_id:
              pattern: "^urn:vcloud:[0-9a-z]+:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
              type: string
              description: VCD URN identifying the vCenter instance.
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    VcdVcenterIntegrationPropertiesPvdc:
      required:
      - storageProfile
      type: object
      properties:
        description:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Description of the PVDC.
        highestSupportedHardwareVersion:
          pattern: "^vmx-[1-9][0-9]*$"
          type: string
          description: "The hardware version to set for the PVDC. Default: vmx-14"
        clusterName:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: The name of the vCenter cluster to use for PVDC creation. If
            not specified the resource pool will be searched in all available clusters.
        resourcePoolname:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: "The name of the vCenter resource pool to use for PVDC creation.\
            \ If no cluster is specified the resource pool will be searched in all\
            \ available clusters. If no resource pool is specified, the root resource\
            \ pool of the cluster will be used."
        nsxIntegration:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: "The name of the NSX integration to that specifies details\
            \ for network pool name. If no NSX integration is defined, PVDC will not\
            \ be configured."
        storageProfile:
          type: array
          description: The list of storage profiles to be used for PVDC.
          items:
            type: string
            description: The list of storage profiles to be used for PVDC.
        networkPoolname:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: The name of the network pool to be used for PVDC. The network
            pool is defined in the referenced NSX integration.
        enabled:
          type: boolean
      description: "Provider VDCs to create - key: PVDC name, value: definition of\
        \ PVDC."
    VcenterSpec:
      required:
      - clusterName
      - datacenterName
      - datastores
      - networks
      - vcenterHost
      - vcenterName
      - vcenterPassword
      - vcenterUsername
      type: object
      properties:
        vcenterName:
          type: string
          description: A name to identify the vCenter instance.
        vcenterHost:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the vCenter instance.
        vcenterUsername:
          type: string
          description: Username to connect to the vCenter instance.
        vcenterPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password to connect to the vCenter instance.
        datacenterName:
          type: string
          description: Datacenter to deploy in.
        clusterName:
          type: string
          description: Cluster to deploy in.
        datastores:
          type: array
          description: List of datastores to use for deployments.
          items:
            type: string
            description: List of datastores to use for deployments.
        networks:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/NetworkSpec'
          description: List of networks (defining port groups and related subnets)
            used for deployments.
        folderName:
          type: string
          description: vCenter folder to deploy in.
        resourcePool:
          type: string
          description: Resource pool to deploy in.
    VcplcmRmqUserProperties:
      required:
      - password
      - username
      type: object
      properties:
        username:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username of the user to create
        password:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for the user to create
      description: List of user accounts to be created in RabbitMQ
    VcplcmUmProxyProperties:
      required:
      - host
      - port
      - type
      type: object
      properties:
        type:
          pattern: ^none|http|https$
          type: string
          description: "Proxy protocol type: none, http and https"
        host:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Proxy hostname or IP address
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Proxy listening port
          format: int32
        user:
          type: string
          description: Proxy user
        password:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: User's password
      description: Properties needed to configure a Proxy server.
    VropstaProductSpec:
      required:
      - adminPassword
      - nodes
      - productId
      - productType
      - version
      type: object
      properties:
        properties:
          type: object
          properties:
            diskMode:
              pattern: ^thin|thick|eagerZeroedThick$
              type: string
              description: "The mode to use for creating the virtual disk of the VM\
                \ (thin, thick, eagerZeroedThick). Default: thin"
        infraReference:
          type: string
        productType:
          type: string
          description: "Product type, defining the type of application to integrate\
            \ with (VCD, USAGE, RMQ, VROPSTA)."
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
        productId:
          type: string
        version:
          pattern: "^[0-9]+(\\.[0-9]+){0,3}(-[a-zA-Z0-9]+)?$"
          type: string
          description: Version of the product to deploy or import.
        license:
          pattern: "^([a-zA-Z0-9]{5}-){4}[a-zA-Z0-9]{5}$"
          type: string
          description: License for the product
        adminPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Admin password for the product's administrator account
        nodes:
          type: array
          description: List of nodes for the product
          items:
            $ref: '#/components/schemas/ProductNodeSpec'
        integrations:
          type: array
          items:
            $ref: '#/components/schemas/VropstaIntegrationSpec'
        certificate:
          type: object
          properties:
            product:
              $ref: '#/components/schemas/CertificateSpec'
    VropstaVcdIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          properties:
            tenantAppProxy:
              pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
                -]*[a-zA-Z0-9])?$"
              type: string
              description: The URL to use for public access to vROPS Tenant App.
            amqp:
              $ref: '#/components/schemas/VropstaVcdIntegrationPropertiesAmqp'
            credentials:
              $ref: '#/components/schemas/VropstaVcdIntegrationPropertiesCredentials'
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        productId:
          type: string
          description: ID of the integration.
        productType:
          type: string
          enum:
          - VCD
          - USAGE
          - VROPSTA
          - RMQ
    VropstaVcdIntegrationPropertiesAmqp:
      required:
      - amqpHost
      type: object
      properties:
        amqpHost:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: The hostname or IP address of the AMQP host.
        amqpPort:
          pattern: "^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([1-9][0-9]{0,3}))$"
          type: string
          description: "Port of the AMQP service to configure in vROPS Tenant App.\
            \ Default: 5672"
        amqpVHost:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: "The AMQP virtual host path to use for AMQP service. Default:\
            \ /"
        amqpUseSSL:
          pattern: ^true|false$
          type: string
          description: "Definition whether to use SSL for AMQP service or plain-text.\
            \ Default: false (plain-text)"
      description: The AMQP settings for vROPS Tenant App.
    VropstaVcdIntegrationPropertiesCredentials:
      type: object
      properties:
        vcdAmqp:
          $ref: '#/components/schemas/VropstaVcdIntegrationPropertiesCredentialsVcdAmqp'
        tenantAppAmqp:
          $ref: '#/components/schemas/VropstaVcdIntegrationPropertiesCredentialsTenantAppAmqp'
      description: Credentials to use for the VCD integration (for configuring AMQP
        access).
    VropstaVcdIntegrationPropertiesCredentialsTenantAppAmqp:
      type: object
      properties:
        username:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username to use for vROPS Tenant App AMQP
        password:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for AMQP user to use vROPS Tenant App AMQP
      description: Credentials for vROPS Tenant App AMQP
    VropstaVcdIntegrationPropertiesCredentialsVcdAmqp:
      type: object
      properties:
        password:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for the user used for VCD AMQP integration
      description: Credentials for VCD AMQP (should match the AMQP service configured
        in VCD).
    VropstaVropsIntegration:
      required:
      - hostname
      - integrationPassword
      - integrationUsername
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            type: object
        integrationId:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: ID of an integration.
        integrationUsername:
          pattern: "^[^;'\"]{1,80}$"
          type: string
          description: Username for an integration.
        integrationPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
          description: Password for an integration.
        hostname:
          pattern: "^([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\\
            -]*[a-zA-Z0-9])?$"
          type: string
          description: Hostname or IP address of the integration
        port:
          maximum: 65535
          minimum: 1
          type: integer
          description: Port to connect to the integration's endpoint.
          format: int32
        datacenterComponentId:
          type: string
          description: ID of the integration.
        datacenterComponentType:
          type: string
          enum:
          - VCENTER
          - NSXT
          - VRSLCM
          - VROPS
          - VRLI
    ProductUpdateNodeSpec:
      type: object
      properties:
        cpuNum:
          minimum: 1
          type: integer
          format: int32
        ramMemory:
          minimum: 1024
          type: integer
          format: int32
        rootPassword:
          pattern: "^[^'\"]{2,24}$"
          type: string
    SubTask:
      type: object
      properties:
        name:
          type: string
        status:
          type: string
          enum:
          - NOT_STARTED
          - IN_PROGRESS
          - SUCCESS
          - ERROR
          - CANCELLED
        message:
          type: object
        nextSubTasks:
          type: object
          additionalProperties:
            type: string
        ignoreStatus:
          type: boolean
    Task:
      type: object
      properties:
        id:
          type: integer
          format: int64
        subTasks:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/SubTask'
        status:
          type: string
          enum:
          - NOT_STARTED
          - IN_PROGRESS
          - SUCCESS
          - ERROR
          - CANCELLED
        message:
          type: object
    About:
      required:
      - apiVersions
      - productVersion
      type: object
      properties:
        productVersion:
          type: string
        buildNumber:
          type: string
        apiVersions:
          type: array
          items:
            $ref: '#/components/schemas/ApiVersion'
    ApiVersion:
      type: object
      properties:
        apiVersion:
          type: string
        deprecated:
          type: boolean
