{
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "schemes": [
    "http",
    "https"
  ],
  "swagger": "2.0",
  "info": {
    "description": "Assisted installation",
    "title": "AssistedInstall",
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    },
    "version": "1.0.0"
  },
  "host": "api.openshift.com",
  "basePath": "/api/assisted-install",
  "paths": {
    "/v2/clusters": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "watcherAuth": []
          }
        ],
        "description": "Retrieves the list of OpenShift clusters.",
        "tags": [
          "installer"
        ],
        "operationId": "v2ListClusters",
        "parameters": [
          {
            "type": "boolean",
            "default": false,
            "description": "Whether to return clusters that have been unregistered.",
            "name": "get_unregistered_clusters",
            "in": "header"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "A specific cluster to retrieve.",
            "name": "openshift_cluster_id",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "If non-empty, returned Clusters are filtered to those with matching subscription IDs.",
            "name": "ams_subscription_ids",
            "in": "query"
          },
          {
            "type": "boolean",
            "default": false,
            "description": "Include hosts in the returned list.",
            "name": "with_hosts",
            "in": "query",
            "allowEmptyValue": true
          },
          {
            "type": "string",
            "description": "If provided, returns only clusters that are owned by the specified user.",
            "name": "owner",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster-list"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "description": "Creates a new OpenShift cluster definition.",
        "tags": [
          "installer"
        ],
        "operationId": "v2RegisterCluster",
        "parameters": [
          {
            "description": "The properties describing the new cluster.",
            "name": "new-cluster-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/cluster-create-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/default-config": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Get the default values for various cluster properties.",
        "tags": [
          "installer"
        ],
        "operationId": "V2GetClusterDefaultConfig",
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster_default_config"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/import": {
      "post": {
        "description": "Import an AI cluster using minimal data associated with existing OCP cluster, in order to allow adding day2 hosts to that cluster",
        "tags": [
          "installer"
        ],
        "operationId": "v2ImportCluster",
        "parameters": [
          {
            "description": "Parameters for importing a OCP cluster for adding nodes.",
            "name": "new-import-cluster-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/import-cluster-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          },
          {
            "watcherAuth": []
          }
        ],
        "description": "Retrieves the details of the OpenShift cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetCluster",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to be retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is retrieving the cluster details.",
            "name": "discovery_agent_version",
            "in": "header"
          },
          {
            "type": "boolean",
            "default": false,
            "description": "Whether to return clusters that have been unregistered.",
            "name": "get_unregistered_clusters",
            "in": "header"
          },
          {
            "type": "boolean",
            "description": "If true, do not include hosts.",
            "name": "exclude-hosts",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "delete": {
        "description": "Deletes an OpenShift cluster definition.",
        "tags": [
          "installer"
        ],
        "operationId": "v2DeregisterCluster",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to be deregistered.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "description": "Updates an OpenShift cluster definition.",
        "tags": [
          "installer"
        ],
        "operationId": "V2UpdateCluster",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to be updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The properties to update.",
            "name": "cluster-update-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/v2-cluster-update-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/allow-add-hosts": {
      "post": {
        "description": "Transforms installed cluster to a state which allows adding hosts.",
        "tags": [
          "installer"
        ],
        "operationId": "TransformClusterToAddingHosts",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to transform.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/allow-add-workers": {
      "post": {
        "description": "Deprecated, maintained for legacy purposes. Does the same thing as allow-add-hosts. Use allow-add-hosts instead.",
        "tags": [
          "installer"
        ],
        "operationId": "TransformClusterToDay2",
        "deprecated": true,
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to transform.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/cancel": {
      "post": {
        "description": "Cancels an ongoing installation.",
        "tags": [
          "installer"
        ],
        "operationId": "V2CancelInstallation",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose installation is to be canceled.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/complete-installation": {
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Agent API to mark a finalizing installation as complete and progress to 100%.",
        "tags": [
          "installer"
        ],
        "operationId": "v2CompleteInstallation",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose installation is being completing.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The final status of the cluster installation.",
            "name": "completion-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/completion-params"
            }
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is completing the installation.",
            "name": "discovery_agent_version",
            "in": "header"
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/install": {
      "post": {
        "description": "Installs the OpenShift cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2InstallCluster",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to be installed.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/actions/reset": {
      "post": {
        "description": "Resets a failed installation.",
        "tags": [
          "installer"
        ],
        "operationId": "v2ResetCluster",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose installation is to be reset.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/cluster"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/credentials": {
      "get": {
        "security": [
          {
            "userAuth": [
              "user"
            ]
          }
        ],
        "description": "Get the cluster admin credentials.",
        "tags": [
          "installer"
        ],
        "operationId": "V2GetCredentials",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose admin credentials should be retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/credentials"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/downloads/credentials": {
      "get": {
        "security": [
          {
            "userAuth": [
              "user"
            ]
          },
          {
            "urlAuth": []
          },
          {
            "agentAuth": []
          }
        ],
        "description": "Downloads credentials relating to the installed/installing cluster.",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "V2DownloadClusterCredentials",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster that owns the credential file that should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "kubeadmin-password",
              "kubeconfig",
              "kubeconfig-noingress"
            ],
            "type": "string",
            "description": "The credential file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/downloads/credentials-presigned": {
      "get": {
        "security": [
          {
            "userAuth": [
              "user"
            ]
          }
        ],
        "description": "Get the cluster admin credentials.",
        "tags": [
          "installer"
        ],
        "operationId": "V2GetPresignedForClusterCredentials",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster that owns the file that should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "kubeadmin-password",
              "kubeconfig",
              "kubeconfig-noingress"
            ],
            "type": "string",
            "description": "The file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/presigned-url"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/downloads/files": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          },
          {
            "urlAuth": []
          }
        ],
        "description": "Downloads files relating to the installed/installing cluster.",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "V2DownloadClusterFiles",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster that owns the file that should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "bootstrap.ign",
              "master.ign",
              "metadata.json",
              "worker.ign",
              "install-config.yaml",
              "custom_manifests.json",
              "custom_manifests.yaml",
              "arbiter.ign"
            ],
            "type": "string",
            "description": "The file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is downloading the file.",
            "name": "discovery_agent_version",
            "in": "header"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/downloads/files-presigned": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves a pre-signed S3 URL for downloading cluster files.",
        "tags": [
          "installer"
        ],
        "operationId": "V2GetPresignedForClusterFiles",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster that owns the file that should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "bootstrap.ign",
              "master.ign",
              "metadata.json",
              "worker.ign",
              "install-config.yaml",
              "logs",
              "manifests"
            ],
            "type": "string",
            "description": "The file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          },
          {
            "enum": [
              "host",
              "controller",
              "all"
            ],
            "type": "string",
            "description": "If downloading logs, the type of logs to download.",
            "name": "logs_type",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "If downloading a file related to a host, the relevant host.",
            "name": "host_id",
            "in": "query"
          },
          {
            "type": "string",
            "description": "If downloading a manifest, the file name, prefaced with folder name, for example, openshift/99-openshift-xyz.yaml.",
            "name": "additional_name",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/presigned-url"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/hosts": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          }
        ],
        "description": "Get a list of cluster hosts according to supplied filters.",
        "tags": [
          "installer"
        ],
        "operationId": "ListClusterHosts",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose hosts should be retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "master",
              "arbiter",
              "worker",
              "auto-assign"
            ],
            "type": "string",
            "description": "Role to request.",
            "name": "role",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Hosts status to request.",
            "name": "status",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "If true return the host's inventory.",
            "name": "with-inventory",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "If true return the host's connectivity.",
            "name": "with-connectivity",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host-list"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/ignored-validations": {
      "get": {
        "description": "Fetch the validations which are to be ignored for this cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetIgnoredValidations",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose failing validations should be ignored according to this list.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ignored-validations"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "put": {
        "description": "Register the validations which are to be ignored for this cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2SetIgnoredValidations",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose failing validations should be ignored according to this list.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The validations to be ignored.",
            "name": "ignored_validations",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ignored-validations"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ignored-validations"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/install-config": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Get the cluster's install config YAML.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetClusterInstallConfig",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose install config is being retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "description": "Override values in the install config.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateClusterInstallConfig",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose install config is being updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Install config overrides.",
            "name": "install-config-params",
            "in": "body",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/logs": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "urlAuth": []
          }
        ],
        "description": "Download cluster logs.",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "V2DownloadClusterLogs",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose logs should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "host",
              "controller",
              "all"
            ],
            "type": "string",
            "description": "The type of logs to be downloaded.",
            "name": "logs_type",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "A specific host in the cluster whose logs should be downloaded.",
            "name": "host_id",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Agent API to upload logs.",
        "consumes": [
          "multipart/form-data"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "V2UploadLogs",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose logs should be uploaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "maxLength": 104857600,
            "type": "file",
            "x-mimetype": "application/zip",
            "description": "The log file to be uploaded.",
            "name": "upfile",
            "in": "formData"
          },
          {
            "enum": [
              "host",
              "controller"
            ],
            "type": "string",
            "description": "The type of log file to be uploaded.",
            "name": "logs_type",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env ID of the host.",
            "name": "infra_env_id",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose logs should be uploaded.",
            "name": "host_id",
            "in": "query"
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/logs-progress": {
      "put": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Update log collection state and progress.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateClusterLogsProgress",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose log progress is being updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Parameters for updating log progress.",
            "name": "logs-progress-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/logs-progress-params"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Update cluster install progress."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/manifests": {
      "get": {
        "security": [
          {
            "userAuth": []
          }
        ],
        "description": "Lists manifests for customizing cluster installation.",
        "tags": [
          "manifests"
        ],
        "operationId": "V2ListClusterManifests",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster for which the manifests should be listed.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "default": false,
            "description": "Include system generated manifests in results? Default is false.",
            "name": "include_system_generated",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/list-manifests"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "userAuth": []
          }
        ],
        "description": "Creates a manifest for customizing cluster installation.",
        "tags": [
          "manifests"
        ],
        "operationId": "V2CreateClusterManifest",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster for which a new manifest should be created.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The new manifest to create.",
            "name": "CreateManifestParams",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/create-manifest-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/manifest"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "delete": {
        "description": "Deletes a manifest from the cluster.",
        "tags": [
          "manifests"
        ],
        "operationId": "V2DeleteClusterManifest",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose manifest should be deleted.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "manifests",
              "openshift"
            ],
            "type": "string",
            "default": "manifests",
            "description": "The folder that contains the files. Manifests can be placed in 'manifests' or 'openshift' directories.",
            "name": "folder",
            "in": "query"
          },
          {
            "type": "string",
            "description": "The manifest file name to delete from the cluster.",
            "name": "file_name",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "userAuth": []
          }
        ],
        "description": "Updates a manifest for customizing cluster installation.",
        "tags": [
          "manifests"
        ],
        "operationId": "V2UpdateClusterManifest",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster for which a new manifest should be updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The manifest to be updated.",
            "name": "UpdateManifestParams",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/update-manifest-params"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/manifest"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/manifests/files": {
      "get": {
        "security": [
          {
            "userAuth": []
          }
        ],
        "description": "Downloads cluster manifest.",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "manifests"
        ],
        "operationId": "v2DownloadClusterManifest",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose manifest should be downloaded.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "manifests",
              "openshift"
            ],
            "type": "string",
            "default": "manifests",
            "description": "The folder that contains the files. Manifests can be placed in 'manifests' or 'openshift' directories.",
            "name": "folder",
            "in": "query"
          },
          {
            "type": "string",
            "description": "The manifest file name to download.",
            "name": "file_name",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/monitored-operators": {
      "get": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Lists operators to be monitored for a cluster.",
        "tags": [
          "operators",
          "installer"
        ],
        "operationId": "V2ListOfClusterOperators",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to return operators for.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "An operator in the specified cluster to return its data.",
            "name": "operator_name",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/monitored-operators-list"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Controller API to report of monitored operators.",
        "tags": [
          "operators",
          "installer"
        ],
        "operationId": "v2ReportMonitoredOperatorStatus",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose operators are being monitored.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The operators monitor report.",
            "name": "report-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/operator-monitor-report"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success."
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/preflight-requirements": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Get preflight requirements for a cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetPreflightRequirements",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to return preflight requirements for.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/preflight-hardware-requirements"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/progress": {
      "put": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Update installation finalizing progress.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateClusterFinalizingProgress",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster being updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "New progress value.",
            "name": "finalizing-progress",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/cluster-finalizing-progress"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Update install progress."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/supported-platforms": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "A list of platforms that this cluster can support in its current configuration.",
        "tags": [
          "installer"
        ],
        "operationId": "GetClusterSupportedPlatforms",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster whose platform types should be retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/platform_type"
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/ui-settings": {
      "get": {
        "description": "Fetch cluster specific UI settings.",
        "tags": [
          "installer"
        ],
        "operationId": "V2GetClusterUISettings",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster for which UI settings should be retrieved.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "put": {
        "description": "Update cluster specific UI settings.",
        "tags": [
          "installer"
        ],
        "operationId": "V2UpdateClusterUISettings",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster for which UI settings should be updated.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Settings for the installer UI.",
            "name": "ui-settings",
            "in": "body",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/clusters/{cluster_id}/uploads/ingress-cert": {
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Transfer the ingress certificate for the cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UploadClusterIngressCert",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to associate with the ingress certificate.",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The ingress certificate.",
            "name": "ingress-cert-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ingress-cert-params"
            }
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is uploading the ingress certificate.",
            "name": "discovery_agent_version",
            "in": "header"
          }
        ],
        "responses": {
          "201": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/component-versions": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "List of component versions.",
        "tags": [
          "versions"
        ],
        "operationId": "v2ListComponentVersions",
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/list-versions"
            }
          }
        }
      }
    },
    "/v2/domains": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "List of managed DNS domains.",
        "tags": [
          "managed_domains"
        ],
        "operationId": "V2ListManagedDomains",
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/list-managed-domains"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/events": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "urlAuth": []
          },
          {
            "watcherAuth": []
          }
        ],
        "description": "Lists events for a cluster.",
        "tags": [
          "events"
        ],
        "operationId": "v2ListEvents",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The cluster to return events for.",
            "name": "cluster_id",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "A host in the specified cluster to return events for (DEPRECATED. Use `host_ids` instead).",
            "name": "host_id",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Hosts in the specified cluster to return events for.",
            "name": "host_ids",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env to return events for.",
            "name": "infra_env_id",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "The maximum number of records to retrieve.",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Number of records to skip before starting to return the records.",
            "name": "offset",
            "in": "query"
          },
          {
            "enum": [
              "ascending",
              "descending"
            ],
            "type": "string",
            "default": "ascending",
            "description": "Order by event_time of events retrieved.",
            "name": "order",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "enum": [
                "info",
                "warning",
                "error",
                "critical"
              ],
              "type": "string"
            },
            "description": "Retrieved events severities.",
            "name": "severities",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Retrieved events message pattern.",
            "name": "message",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Deleted hosts flag.",
            "name": "deleted_hosts",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Cluster level events flag.",
            "name": "cluster_level",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A comma-separated list of event categories.",
            "name": "categories",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/event-list"
            },
            "headers": {
              "Event-Count": {
                "type": "integer",
                "description": "Count of events retrieved."
              },
              "Severity-Count-Critical": {
                "type": "integer",
                "description": "Count of events with severity 'critical'."
              },
              "Severity-Count-Error": {
                "type": "integer",
                "description": "Count of events with severity 'error'."
              },
              "Severity-Count-Info": {
                "type": "integer",
                "description": "Count of events with severity 'info'."
              },
              "Severity-Count-Warning": {
                "type": "integer",
                "description": "Count of events with severity 'warning'."
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Add new assisted installer event.",
        "tags": [
          "events"
        ],
        "operationId": "v2TriggerEvent",
        "parameters": [
          {
            "description": "The event to be created.",
            "name": "trigger-event-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/event"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Cluster cannot accept new agents due to its current state.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-env/{infra_env_id}/hosts/{host_id}/downloads/ignition": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          }
        ],
        "description": "Downloads the customized ignition file for this bound host, produces octet stream. For unbound host - error is returned",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "v2DownloadHostIgnition",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host whose ignition file should be downloaded.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose ignition file should be downloaded.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "watcherAuth": []
          }
        ],
        "description": "Retrieves the list of infra-envs.",
        "tags": [
          "installer"
        ],
        "operationId": "ListInfraEnvs",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "If provided, returns only infra-envs which directly reference this cluster.",
            "name": "cluster_id",
            "in": "query"
          },
          {
            "type": "string",
            "description": "If provided, returns only infra-envs that are owned by the specified user.",
            "name": "owner",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/infra-env-list"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "description": "Creates a new OpenShift Discovery ISO.",
        "tags": [
          "installer"
        ],
        "operationId": "RegisterInfraEnv",
        "parameters": [
          {
            "description": "The parameters for the generated ISO.",
            "name": "infraenv-create-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/infra-env-create-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/infra-env"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          },
          {
            "urlAuth": []
          },
          {
            "imageAuth": []
          },
          {
            "imageURLAuth": []
          }
        ],
        "description": "Retrieves the details of the infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "GetInfraEnv",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env to be retrieved.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/infra-env"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "delete": {
        "description": "Deletes an infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "DeregisterInfraEnv",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env to be deleted.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "description": "Updates an infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "UpdateInfraEnv",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env to be updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The properties to update.",
            "name": "infra-env-update-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/infra-env-update-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/infra-env"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/downloads/files": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          },
          {
            "urlAuth": []
          },
          {
            "imageAuth": []
          },
          {
            "imageURLAuth": []
          }
        ],
        "description": "Downloads the customized ignition file for this host",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "v2DownloadInfraEnvFiles",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env whose file should be downloaded.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "discovery.ign",
              "ipxe-script",
              "static-network-config"
            ],
            "type": "string",
            "description": "The file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "format": "mac",
            "description": "Mac address of the host running ipxe script.",
            "name": "mac",
            "in": "query"
          },
          {
            "enum": [
              "discovery-image-always",
              "boot-order-control"
            ],
            "type": "string",
            "description": "Specify the script type to be served for iPXE.",
            "name": "ipxe_script_type",
            "in": "query"
          },
          {
            "enum": [
              "full-iso",
              "minimal-iso"
            ],
            "type": "string",
            "description": "Overrides the ISO type for the disovery ignition, either 'full-iso' or 'minimal-iso'.",
            "name": "discovery_iso_type",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "file"
            }
          },
          "400": {
            "description": "Bad Request.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/downloads/files-presigned": {
      "get": {
        "description": "Creates a new pre-signed download URL for the infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "GetInfraEnvPresignedFileURL",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The file's infra-env.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "enum": [
              "discovery.ign",
              "ipxe-script"
            ],
            "type": "string",
            "description": "The file to be downloaded.",
            "name": "file_name",
            "in": "query",
            "required": true
          },
          {
            "enum": [
              "discovery-image-always",
              "boot-order-control"
            ],
            "type": "string",
            "description": "Specify the script type to be served for iPXE.",
            "name": "ipxe_script_type",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/presigned-url"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/downloads/image-url": {
      "get": {
        "description": "Creates a new pre-signed image download URL for the infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "GetInfraEnvDownloadURL",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env to be retrieved.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/presigned-url"
            }
          },
          "400": {
            "description": "Bad Request.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/downloads/minimal-initrd": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "urlAuth": []
          },
          {
            "imageAuth": []
          }
        ],
        "description": "Get the initial ramdisk for minimal ISO based installations.\n",
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "installer"
        ],
        "operationId": "DownloadMinimalInitrd",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that should be retrieved.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "string",
              "format": "binary"
            }
          },
          "204": {
            "description": "Empty Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Conflict.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          },
          {
            "agentAuth": []
          }
        ],
        "description": "Retrieves the list of OpenShift hosts that belong the infra-env.",
        "tags": [
          "installer"
        ],
        "operationId": "v2ListHosts",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env that the hosts are asociated with.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host-list"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Registers a new OpenShift agent.",
        "tags": [
          "installer"
        ],
        "operationId": "v2RegisterHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env that the agent is associated with.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The description of the agent being registered.",
            "name": "new-host-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/host-create-params"
            }
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is registering the agent.",
            "name": "discovery_agent_version",
            "in": "header"
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host_registration_response"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Cluster cannot accept new agents due to its current state.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves the details of the OpenShift host.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that should be retrieved.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that should be retrieved.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "delete": {
        "description": "Deregisters an OpenShift host.",
        "tags": [
          "installer"
        ],
        "operationId": "v2DeregisterHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that should be deregistered.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that should be deregistered.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "description": "Update an Openshift host",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env ID of the host to be updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that should be updated.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The properties to update.",
            "name": "host-update-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/host-update-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/bind": {
      "post": {
        "description": "Bind host to a cluster",
        "tags": [
          "installer"
        ],
        "operationId": "BindHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is being bound.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is being bound.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The parameters for the host binding.",
            "name": "bind-host-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/bind-host-params"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/install": {
      "post": {
        "description": "install specific host for day2 cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2InstallHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is being installed.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is being installed.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/reset": {
      "post": {
        "description": "reset a failed host for day2 cluster.",
        "tags": [
          "installer"
        ],
        "operationId": "v2ResetHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is being reset.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is being reset.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/reset-validation/{validation_id}": {
      "patch": {
        "description": "Reset failed host validation. It may be performed on any host validation with persistent validation result.",
        "tags": [
          "installer"
        ],
        "summary": "Reset failed host validation.",
        "operationId": "v2ResetHostValidation",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that its validation is being reset.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that its validation is being reset.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "The id of the validation being reset.",
            "name": "validation_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/unbind": {
      "post": {
        "description": "Unbind host to a cluster",
        "tags": [
          "installer"
        ],
        "operationId": "UnbindHost",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is being bound.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is being bound.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Conflict.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/ignition": {
      "get": {
        "description": "Fetch the ignition file for this host as a string. In case of unbound host produces an error",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetHostIgnition",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host whose ignition file should be obtained.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose ignition file should be obtained.",
            "name": "host_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host-ignition-params"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "patch": {
        "description": "Patch the ignition file for this host",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateHostIgnition",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host whose ignition file should be updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose ignition file should be updated.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Ignition config overrides.",
            "name": "host-ignition-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/host-ignition-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/installer-args": {
      "patch": {
        "description": "Updates a host's installer arguments.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateHostInstallerArgs",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host whose installer arguments should be updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose installer arguments should be updated.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The updated installer arguments.",
            "name": "installer-args-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/installer-args-params"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/host"
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/instructions": {
      "get": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Retrieves the next operations that the host agent needs to perform.",
        "tags": [
          "installer"
        ],
        "operationId": "v2GetNextSteps",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is retrieving instructions.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is retrieving instructions.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "The time on the host as seconds since the Unix epoch.",
            "name": "timestamp",
            "in": "query"
          },
          {
            "type": "string",
            "description": "The software version of the discovery agent that is retrieving instructions.",
            "name": "discovery_agent_version",
            "in": "header"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/steps"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Posts the result of the operations from the host agent.",
        "tags": [
          "installer"
        ],
        "operationId": "v2PostStepReply",
        "parameters": [
          {
            "type": "string",
            "description": "The software version of the discovery agent that is posting results.",
            "name": "discovery_agent_version",
            "in": "header"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host that is posting results.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host that is posting results.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "The results to be posted.",
            "name": "reply",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/step-reply"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/logs-progress": {
      "put": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Update log collection state and progress.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateHostLogsProgress",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env whose log progress is being updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The host whose log progress is being updated.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Parameters for updating log progress.",
            "name": "logs-progress-params",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/logs-progress-params"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Update cluster install progress."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "409": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "501": {
            "description": "Not implemented.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/hosts/{host_id}/progress": {
      "put": {
        "security": [
          {
            "agentAuth": []
          }
        ],
        "description": "Update installation progress.",
        "tags": [
          "installer"
        ],
        "operationId": "v2UpdateHostInstallProgress",
        "parameters": [
          {
            "type": "string",
            "description": "The software version of the discovery agent that is updating progress.",
            "name": "discovery_agent_version",
            "in": "header"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The infra-env of the host being updated.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the host to update.",
            "name": "host_id",
            "in": "path",
            "required": true
          },
          {
            "description": "New progress value.",
            "name": "host-progress",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/host-progress"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Update install progress."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/infra-envs/{infra_env_id}/regenerate-signing-key": {
      "post": {
        "description": "Regenerate InfraEnv token signing key.",
        "tags": [
          "installer"
        ],
        "operationId": "RegenerateInfraEnvSigningKey",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "The target InfraEnv.",
            "name": "infra_env_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Success."
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "405": {
            "description": "Method Not Allowed.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/openshift-versions": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves the list of OpenShift supported versions.",
        "tags": [
          "versions"
        ],
        "operationId": "v2ListSupportedOpenshiftVersions",
        "parameters": [
          {
            "type": "string",
            "description": "Retrieves only the versions that contain the specified substring in their display name.",
            "name": "version",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "If true, returns only the latest version for each minor.",
            "name": "only_latest",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/openshift-versions"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/operators/bundles": {
      "get": {
        "description": "Retrieves a list of avaliable bundles.",
        "tags": [
          "operators"
        ],
        "summary": "Get list of avaliable bundles",
        "operationId": "V2ListBundles",
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/bundle"
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/operators/bundles/{id}": {
      "get": {
        "description": "Retrieves an array of operator properties for the specified bundle.",
        "tags": [
          "operators"
        ],
        "summary": "Get operator properties for a bundle",
        "operationId": "V2GetBundle",
        "parameters": [
          {
            "type": "string",
            "description": "Identifier of the bundle, for example, `virtualization` or `openshift-ai-nvidia`.",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/bundle"
            }
          },
          "404": {
            "description": "Bundle not found",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Internal server error",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/release-sources": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves openshift release sources configuration.",
        "tags": [
          "versions"
        ],
        "operationId": "v2ListReleaseSources",
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/release-sources"
            }
          }
        }
      }
    },
    "/v2/support-levels/architectures": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves the architecture support-levels for each OpenShift version.",
        "tags": [
          "installer"
        ],
        "operationId": "GetSupportedArchitectures",
        "parameters": [
          {
            "type": "string",
            "description": "Version of the OpenShift cluster.",
            "name": "openshift_version",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "object",
              "properties": {
                "architectures": {
                  "description": "Keys will be one of architecture-support-level-id enum.",
                  "$ref": "#/definitions/support-levels"
                }
              }
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/support-levels/features": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Retrieves the features support levels for each OpenShift version.",
        "tags": [
          "installer"
        ],
        "operationId": "GetSupportedFeatures",
        "parameters": [
          {
            "type": "string",
            "description": "Version of the OpenShift cluster.",
            "name": "openshift_version",
            "in": "query",
            "required": true
          },
          {
            "enum": [
              "x86_64",
              "aarch64",
              "arm64",
              "ppc64le",
              "s390x",
              "multi"
            ],
            "type": "string",
            "default": "x86_64",
            "description": "The CPU architecture of the image (x86_64/arm64/etc).",
            "name": "cpu_architecture",
            "in": "query"
          },
          {
            "enum": [
              "baremetal",
              "none",
              "nutanix",
              "vsphere",
              "external"
            ],
            "type": "string",
            "description": "The provider platform type.",
            "name": "platform_type",
            "in": "query"
          },
          {
            "type": "string",
            "description": "External platform name when platform type is set to external. The value of this parameter will be ignored if platform_type is not external.",
            "name": "external_platform_name",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "object",
              "properties": {
                "features": {
                  "description": "Keys will be one of features-support-level-id enum.",
                  "$ref": "#/definitions/support-levels"
                }
              }
            }
          },
          "400": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "503": {
            "description": "Unavailable.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/supported-operators": {
      "get": {
        "description": "Retrieves the list of supported operators.",
        "tags": [
          "operators"
        ],
        "operationId": "V2ListSupportedOperators",
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "amd-gpu",
                  "lso",
                  "mtv",
                  "openshift-ai",
                  "osc",
                  "servicemesh",
                  "authorino",
                  "cnv",
                  "nvidia-gpu",
                  "pipelines",
                  "odf",
                  "lvm",
                  "mce",
                  "node-feature-discovery",
                  "serverless",
                  "nmstate",
                  "kmm",
                  "node-healthcheck",
                  "self-node-remediation",
                  "fence-agents-remediation",
                  "node-maintenance",
                  "kube-descheduler"
                ]
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    },
    "/v2/supported-operators/{operator_name}": {
      "get": {
        "security": [
          {
            "userAuth": [
              "admin",
              "read-only-admin",
              "user"
            ]
          }
        ],
        "description": "Lists properties for an operator.",
        "tags": [
          "operators"
        ],
        "operationId": "V2ListOperatorProperties",
        "parameters": [
          {
            "type": "string",
            "description": "The operator name.",
            "name": "operator_name",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/operator-properties"
            }
          },
          "401": {
            "description": "Unauthorized.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "403": {
            "description": "Forbidden.",
            "schema": {
              "$ref": "#/definitions/infra_error"
            }
          },
          "404": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          },
          "500": {
            "description": "Error.",
            "schema": {
              "$ref": "#/definitions/error"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "api_vip": {
      "description": "The virtual IP used to reach the OpenShift cluster's API.",
      "type": "object",
      "properties": {
        "cluster_id": {
          "description": "The cluster that this VIP is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "ip": {
          "description": "The IP address.",
          "$ref": "#/definitions/ip"
        },
        "verification": {
          "description": "API VIP verification result.",
          "$ref": "#/definitions/vip_verification"
        }
      }
    },
    "api_vip_connectivity_additional_request_header": {
      "type": "object",
      "properties": {
        "key": {
          "description": "Value of the header's key when making a request",
          "type": "string"
        },
        "value": {
          "description": "The value corresponding to the header key",
          "type": "string"
        }
      }
    },
    "api_vip_connectivity_request": {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "ca_certificate": {
          "description": "A CA certficate to be used when contacting the URL via https.",
          "type": "string",
          "x-nullable": true
        },
        "ignition_endpoint_token": {
          "description": "A string which will be used as Authorization Bearer token to fetch the ignition from ignition_endpoint_url (DEPRECATED use request_headers to pass this token).",
          "type": "string",
          "x-nullable": true
        },
        "request_headers": {
          "description": "Additional request headers to include when fetching the ignition from ignition_endpoint_url.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/api_vip_connectivity_additional_request_header"
          },
          "x-nullable": true,
          "x-omitempty": true
        },
        "url": {
          "description": "URL address of the API.",
          "type": "string"
        },
        "verify_cidr": {
          "description": "Whether to verify if the API VIP belongs to one of the interfaces (DEPRECATED).",
          "type": "boolean"
        }
      }
    },
    "api_vip_connectivity_response": {
      "description": "The response from the day-2 agent's attempt to download the worker ignition file from the API machine config server of the target cluster.\nNote - the name \"API VIP connectivity\" is old and misleading and is preserved for backwards compatibility.",
      "type": "object",
      "properties": {
        "download_error": {
          "description": "The error that occurred while downloading the worker ignition file, ignored when is_success is true",
          "type": "string"
        },
        "ignition": {
          "description": "Ignition file fetched from the target cluster's API machine config server.\nThis ignition file may be incomplete as almost all files / systemd units are removed from it by the agent in order to save space.",
          "type": "string"
        },
        "is_success": {
          "description": "Whether the agent was able to download the ignition or not",
          "type": "boolean"
        },
        "url": {
          "description": "This parameter mirrors the url parameter of the corresponding api_vip_connectivity_request",
          "type": "string"
        }
      }
    },
    "architecture-support-level-id": {
      "type": "string",
      "enum": [
        "X86_64_ARCHITECTURE",
        "ARM64_ARCHITECTURE",
        "PPC64LE_ARCHITECTURE",
        "S390X_ARCHITECTURE",
        "MULTIARCH_RELEASE_IMAGE"
      ]
    },
    "bind-host-params": {
      "required": [
        "cluster_id"
      ],
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "boot": {
      "type": "object",
      "properties": {
        "command_line": {
          "type": "string"
        },
        "current_boot_mode": {
          "type": "string"
        },
        "device_type": {
          "type": "string",
          "enum": [
            "persistent",
            "ephemeral"
          ]
        },
        "pxe_interface": {
          "type": "string"
        },
        "secure_boot_state": {
          "$ref": "#/definitions/secure-boot-state"
        }
      }
    },
    "bundle": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Longer human friendly description for the bundle, usually one or more sentences.\n",
          "type": "string"
        },
        "id": {
          "description": "Unique identifier of the bundle, for example `virtualization` or `openshift-ai-nvidia`.",
          "type": "string"
        },
        "operators": {
          "description": "List of operators associated with the bundle.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "title": {
          "description": "Short human friendly description for the bundle, usually only a few words, for example `Virtualization` or\n`OpenShift AI (NVIDIA)`.\n",
          "type": "string"
        }
      }
    },
    "cluster": {
      "type": "object",
      "required": [
        "kind",
        "id",
        "href",
        "image_info",
        "status",
        "status_info"
      ],
      "properties": {
        "additional_ntp_source": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string"
        },
        "ams_subscription_id": {
          "description": "Unique identifier of the AMS subscription in OCM.",
          "type": "string",
          "format": "uuid"
        },
        "api_vip_dns_name": {
          "description": "The domain name used to reach the OpenShift cluster API.",
          "type": "string",
          "x-nullable": true
        },
        "api_vips": {
          "description": "The virtual IPs used to reach the OpenShift cluster's API. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/api_vip"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\"",
          "x-nullable": true
        },
        "base_dns_domain": {
          "description": "Base domain of the cluster. All DNS records must be sub-domains of this base and include the cluster name.",
          "type": "string"
        },
        "cluster_network_cidr": {
          "description": "IP address block from which Pod IPs are allocated. This block must not overlap with existing physical networks. These IP addresses are used for the Pod network, and if you need to access the Pods from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$"
        },
        "cluster_network_host_prefix": {
          "description": "The subnet prefix length to assign to each individual node. For example, if clusterNetworkHostPrefix is set to 23, then each node is assigned a /23 subnet out of the given cidr (clusterNetworkCIDR), which allows for 510 (2^(32 - 23) - 2) pod IPs addresses. If you are required to provide access to nodes from an external network, configure load balancers and routers to manage the traffic.",
          "type": "integer",
          "maximum": 128,
          "minimum": 1
        },
        "cluster_networks": {
          "description": "Cluster networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/cluster_network"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\"",
          "x-nullable": true
        },
        "connectivity_majority_groups": {
          "description": "Json formatted string containing the majority groups for connectivity checks.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "control_plane_count": {
          "description": "Specifies the required number of control plane nodes that should be part of the cluster.",
          "type": "integer"
        },
        "controller_logs_collected_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "controller_logs_started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "cpu_architecture": {
          "description": "The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x",
            "multi"
          ],
          "x-nullable": false
        },
        "created_at": {
          "description": "The time that this cluster was created.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "deleted_at": {
          "description": "swagger:ignore",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone;index\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "gorm.io/gorm"
            },
            "type": "DeletedAt"
          },
          "x-nullable": false
        },
        "disk_encryption": {
          "description": "Information regarding hosts' installation disks encryption.",
          "$ref": "#/definitions/disk-encryption"
        },
        "email_domain": {
          "type": "string"
        },
        "enabled_host_count": {
          "description": "hosts associated to this cluster that are not in 'disabled' state.",
          "type": "integer",
          "format": "int64",
          "x-go-custom-tag": "gorm:\"-\""
        },
        "feature_usage": {
          "description": "JSON-formatted string containing the usage information by feature name",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "high_availability_mode": {
          "description": "(DEPRECATED) Please use 'control_plane_count' instead. Guaranteed availability of the installed cluster. 'Full' installs a Highly-Available cluster\nover multiple master nodes whereas 'None' installs a full cluster over one node.\n",
          "type": "string",
          "default": "Full",
          "enum": [
            "Full",
            "None"
          ]
        },
        "host_networks": {
          "description": "List of host networks to be filled during query.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/host_network"
          },
          "x-go-custom-tag": "gorm:\"-\"",
          "x-nullable": true
        },
        "hosts": {
          "description": "Hosts that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/host"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\""
        },
        "href": {
          "description": "Self link.",
          "type": "string"
        },
        "http_proxy": {
          "description": "A proxy URL to use for creating HTTP connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string"
        },
        "https_proxy": {
          "description": "A proxy URL to use for creating HTTPS connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-go-custom-tag": "gorm:\"column:https_proxy\""
        },
        "hyperthreading": {
          "description": "Enable/disable hyperthreading on master nodes, arbiter nodes, worker nodes, or a combination of them.",
          "type": "string",
          "enum": [
            "none",
            "masters",
            "arbiters",
            "workers",
            "masters,arbiters",
            "masters,workers",
            "arbiters,workers",
            "masters,arbiters,workers",
            "all"
          ]
        },
        "id": {
          "description": "Unique identifier of the object.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "ignition_endpoint": {
          "description": "Explicit ignition endpoint overrides the default ignition endpoint.",
          "$ref": "#/definitions/ignition-endpoint"
        },
        "ignored_cluster_validations": {
          "description": "Json formatted string containing a list of cluster validations to be ignored. May also contain a list with a single string \"all\" to ignore all cluster validations. Some validations cannot be ignored.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "ignored_host_validations": {
          "description": "Json formatted string containing a list of host validations to be ignored. May also contain a list with a single string \"all\" to ignore all host validations. Some validations cannot be ignored.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "image_info": {
          "$ref": "#/definitions/image_info"
        },
        "imported": {
          "description": "Indicates whether this cluster is an imported day-2 cluster or a\nregular cluster. Clusters are considered imported when they are\ncreated via the ../clusters/import endpoint. Day-2 clusters converted\nfrom day-1 clusters by kube-api controllers or the\n../clusters/\u003ccluster_id\u003e/actions/allow-add-hosts endpoint are not\nconsidered imported. Imported clusters usually lack a lot of\ninformation and are filled with default values that don't necessarily\nreflect the actual cluster they represent",
          "type": "boolean",
          "default": false
        },
        "ingress_vips": {
          "description": "The virtual IPs used for cluster ingress traffic. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ingress_vip"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\"",
          "x-nullable": true
        },
        "install_completed_at": {
          "description": "The time that this cluster completed installation.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "install_config_overrides": {
          "description": "JSON-formatted string containing the user overrides for the install-config.yaml file.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\"",
          "example": "{\"networking\":{\"networkType\": \"OVNKubernetes\"},\"fips\":true}"
        },
        "install_started_at": {
          "description": "The time that this cluster started installation.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "ip_collisions": {
          "description": "Json formatted string containing ip collisions detected in the cluster.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "kind": {
          "description": "Indicates the type of this object. Will be 'Cluster' if this is a complete object,\n'AddHostsCluster' for cluster that add hosts to existing OCP cluster,\n",
          "type": "string",
          "enum": [
            "Cluster",
            "AddHostsCluster"
          ]
        },
        "last-installation-preparation": {
          "$ref": "#/definitions/last-installation-preparation"
        },
        "load_balancer": {
          "$ref": "#/definitions/load_balancer"
        },
        "logs_info": {
          "description": "The progress of log collection or empty if logs are not applicable",
          "$ref": "#/definitions/logs_state"
        },
        "machine_network_cidr": {
          "description": "A CIDR that all hosts belonging to the cluster should have an interfaces with IP address that belongs to this CIDR. The api_vip belongs to this CIDR.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$"
        },
        "machine_networks": {
          "description": "Machine networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/machine_network"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\"",
          "x-nullable": true
        },
        "monitored_operators": {
          "description": "Operators that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/monitored-operator"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\""
        },
        "name": {
          "description": "Name of the OpenShift cluster.",
          "type": "string"
        },
        "network_type": {
          "description": "The desired network type used.",
          "type": "string",
          "enum": [
            "OpenShiftSDN",
            "OVNKubernetes"
          ],
          "x-nullable": true
        },
        "no_proxy": {
          "description": "A comma-separated list of destination domain names, domains, IP addresses, or other network CIDRs to exclude from proxying.",
          "type": "string"
        },
        "ocp_release_image": {
          "description": "OpenShift release image URI.",
          "type": "string"
        },
        "openshift_cluster_id": {
          "description": "Cluster ID on OCP system.",
          "type": "string",
          "format": "uuid"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string"
        },
        "org_id": {
          "type": "string"
        },
        "org_soft_timeouts_enabled": {
          "description": "Indication if organization soft timeouts is enabled for the cluster.",
          "type": "boolean"
        },
        "platform": {
          "$ref": "#/definitions/platform"
        },
        "progress": {
          "description": "Installation progress percentages of the cluster.",
          "$ref": "#/definitions/cluster-progress-info"
        },
        "pull_secret_set": {
          "description": "True if the pull secret has been added to the cluster.",
          "type": "boolean"
        },
        "ready_host_count": {
          "description": "hosts associated to this cluster that are in 'known' state.",
          "type": "integer",
          "format": "int64",
          "x-go-custom-tag": "gorm:\"-\""
        },
        "schedulable_masters": {
          "description": "Schedule workloads on masters",
          "type": "boolean",
          "default": false
        },
        "schedulable_masters_forced_true": {
          "description": "Indicates if schedule workloads on masters will be enabled regardless the value of 'schedulable_masters' property.\nSet to 'true' when not enough hosts are associated with this cluster to disable the scheduling on masters.\n",
          "type": "boolean",
          "default": true
        },
        "service_network_cidr": {
          "description": "The IP address pool to use for service IP addresses. You can enter only one IP address pool. If you need to access the services from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$"
        },
        "service_networks": {
          "description": "Service networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/service_network"
          },
          "x-go-custom-tag": "gorm:\"foreignkey:ClusterID;references:ID\"",
          "x-nullable": true
        },
        "ssh_public_key": {
          "description": "SSH public key for debugging OpenShift nodes.",
          "type": "string"
        },
        "status": {
          "description": "Status of the OpenShift cluster.",
          "type": "string",
          "enum": [
            "insufficient",
            "ready",
            "error",
            "preparing-for-installation",
            "pending-for-input",
            "installing",
            "finalizing",
            "installed",
            "adding-hosts",
            "cancelled",
            "installing-pending-user-action"
          ]
        },
        "status_info": {
          "description": "Additional information pertaining to the status of the OpenShift cluster.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:varchar(2048)\""
        },
        "status_updated_at": {
          "description": "The last time that the cluster status was updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "tags": {
          "description": "A comma-separated list of tags that are associated to the cluster.",
          "type": "string"
        },
        "total_host_count": {
          "description": "All hosts associated to this cluster.",
          "type": "integer",
          "format": "int64",
          "x-go-custom-tag": "gorm:\"-\""
        },
        "updated_at": {
          "description": "The last time that this cluster was updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "user_managed_networking": {
          "description": "(DEPRECATED) Indicate if the networking is managed by the user.",
          "type": "boolean",
          "x-nullable": true
        },
        "user_name": {
          "type": "string"
        },
        "validations_info": {
          "description": "JSON-formatted string containing the validation results for each validation id grouped by category (network, hosts-data, etc.)",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "vip_dhcp_allocation": {
          "description": "Indicate if virtual IP DHCP allocation mode is enabled.",
          "type": "boolean",
          "x-nullable": true
        }
      }
    },
    "cluster-create-params": {
      "type": "object",
      "required": [
        "name",
        "openshift_version",
        "pull_secret"
      ],
      "properties": {
        "additional_ntp_source": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string",
          "x-nullable": true
        },
        "api_vips": {
          "description": "The virtual IPs used to reach the OpenShift cluster's API. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/api_vip"
          }
        },
        "base_dns_domain": {
          "description": "Base domain of the cluster. All DNS records must be sub-domains of this base and include the cluster name.",
          "type": "string"
        },
        "cluster_network_cidr": {
          "description": "IP address block from which Pod IPs are allocated. This block must not overlap with existing physical networks. These IP addresses are used for the Pod network, and if you need to access the Pods from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "default": "10.128.0.0/14",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$"
        },
        "cluster_network_host_prefix": {
          "description": "The subnet prefix length to assign to each individual node. For example, if clusterNetworkHostPrefix is set to 23, then each node is assigned a /23 subnet out of the given cidr (clusterNetworkCIDR), which allows for 510 (2^(32 - 23) - 2) pod IPs addresses. If you are required to provide access to nodes from an external network, configure load balancers and routers to manage the traffic.",
          "type": "integer",
          "default": 23,
          "maximum": 128,
          "minimum": 1
        },
        "cluster_networks": {
          "description": "Cluster networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/cluster_network"
          },
          "x-nullable": true
        },
        "control_plane_count": {
          "description": "Specifies the required number of control plane nodes that should be part of the cluster.",
          "type": "integer",
          "x-nullable": true
        },
        "cpu_architecture": {
          "description": "The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x",
            "multi"
          ],
          "x-nullable": false
        },
        "disk_encryption": {
          "description": "Installation disks encryption mode and host roles to be applied.",
          "$ref": "#/definitions/disk-encryption"
        },
        "high_availability_mode": {
          "description": "(DEPRECATED) Please use 'control_plane_count' instead. Guaranteed availability of the installed cluster. 'Full' installs a Highly-Available cluster\nover multiple master nodes whereas 'None' installs a full cluster over one node.\n",
          "type": "string",
          "default": "Full",
          "enum": [
            "Full",
            "None"
          ]
        },
        "http_proxy": {
          "description": "A proxy URL to use for creating HTTP connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-nullable": true
        },
        "https_proxy": {
          "description": "A proxy URL to use for creating HTTPS connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-nullable": true
        },
        "hyperthreading": {
          "description": "Enable/disable hyperthreading on master nodes, arbiter nodes, worker nodes, or a combination of them.",
          "type": "string",
          "default": "all",
          "enum": [
            "none",
            "masters",
            "arbiters",
            "workers",
            "masters,arbiters",
            "masters,workers",
            "arbiters,workers",
            "masters,arbiters,workers",
            "all"
          ]
        },
        "ignition_endpoint": {
          "description": "Explicit ignition endpoint overrides the default ignition endpoint.",
          "$ref": "#/definitions/ignition-endpoint"
        },
        "ingress_vips": {
          "description": "The virtual IPs used for cluster ingress traffic. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ingress_vip"
          }
        },
        "load_balancer": {
          "$ref": "#/definitions/load_balancer"
        },
        "machine_networks": {
          "description": "Machine networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/machine_network"
          },
          "x-nullable": true
        },
        "name": {
          "description": "Name of the OpenShift cluster.",
          "type": "string",
          "maxLength": 54,
          "minLength": 1
        },
        "network_type": {
          "description": "The desired network type used.",
          "type": "string",
          "enum": [
            "OpenShiftSDN",
            "OVNKubernetes"
          ],
          "x-nullable": true
        },
        "no_proxy": {
          "description": "An \"*\" or a comma-separated list of destination domain names, domains, IP addresses, or other network CIDRs to exclude from proxying.",
          "type": "string",
          "x-nullable": true
        },
        "ocp_release_image": {
          "description": "OpenShift release image URI.",
          "type": "string"
        },
        "olm_operators": {
          "description": "List of OLM operators to be installed.\nFor the full list of supported operators, check the endpoint `/v2/supported-operators`:\n",
          "type": "array",
          "items": {
            "$ref": "#/definitions/operator-create-params"
          }
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string"
        },
        "platform": {
          "x-nullable": true,
          "$ref": "#/definitions/platform"
        },
        "pull_secret": {
          "description": "The pull secret obtained from Red Hat OpenShift Cluster Manager at console.redhat.com/openshift/install/pull-secret.",
          "type": "string"
        },
        "schedulable_masters": {
          "description": "Schedule workloads on masters",
          "type": "boolean",
          "default": false
        },
        "service_network_cidr": {
          "description": "The IP address pool to use for service IP addresses. You can enter only one IP address pool. If you need to access the services from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "default": "172.30.0.0/16",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$"
        },
        "service_networks": {
          "description": "Service networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/service_network"
          },
          "x-nullable": true
        },
        "ssh_public_key": {
          "description": "SSH public key for debugging OpenShift nodes.",
          "type": "string"
        },
        "tags": {
          "description": "A comma-separated list of tags that are associated to the cluster.",
          "type": "string",
          "x-nullable": true
        },
        "user_managed_networking": {
          "description": "(DEPRECATED) Indicate if the networking is managed by the user.",
          "type": "boolean",
          "default": false,
          "x-nullable": true
        },
        "vip_dhcp_allocation": {
          "description": "Indicate if virtual IP DHCP allocation mode is enabled.",
          "type": "boolean",
          "default": false,
          "x-nullable": true
        }
      }
    },
    "cluster-finalizing-progress": {
      "type": "object",
      "properties": {
        "finalizing_stage": {
          "$ref": "#/definitions/finalizing-stage"
        }
      }
    },
    "cluster-host-requirements": {
      "type": "object",
      "properties": {
        "host_id": {
          "description": "Unique identifier of the host the requirements relate to.",
          "type": "string",
          "format": "uuid"
        },
        "ocp": {
          "description": "Host requirements for the OCP installation",
          "$ref": "#/definitions/cluster-host-requirements-details"
        },
        "operators": {
          "description": "Host requirements related to requested operators",
          "type": "array",
          "items": {
            "$ref": "#/definitions/operator-host-requirements"
          }
        },
        "total": {
          "description": "Total host requirements for the cluster configuration",
          "$ref": "#/definitions/cluster-host-requirements-details"
        }
      }
    },
    "cluster-host-requirements-details": {
      "type": "object",
      "properties": {
        "cpu_cores": {
          "description": "Required number of CPU cores",
          "type": "integer"
        },
        "disk_size_gb": {
          "description": "Required disk size in GB",
          "type": "integer"
        },
        "installation_disk_speed_threshold_ms": {
          "description": "Required installation disk speed in ms",
          "type": "integer"
        },
        "network_latency_threshold_ms": {
          "description": "Maximum network average latency (RTT) at L3 for role.",
          "type": "number",
          "format": "double",
          "x-nullable": true
        },
        "packet_loss_percentage": {
          "description": "Maximum packet loss allowed at L3 for role.",
          "type": "number",
          "format": "double",
          "x-nullable": true
        },
        "ram_mib": {
          "description": "Required number of RAM in MiB",
          "type": "integer"
        },
        "tpm_enabled_in_bios": {
          "description": "Whether TPM module should be enabled in host's BIOS.",
          "type": "boolean"
        }
      }
    },
    "cluster-host-requirements-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/cluster-host-requirements"
      }
    },
    "cluster-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/cluster"
      }
    },
    "cluster-progress-info": {
      "type": "object",
      "properties": {
        "finalizing_stage": {
          "$ref": "#/definitions/finalizing-stage"
        },
        "finalizing_stage_percentage": {
          "type": "integer"
        },
        "finalizing_stage_started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "finalizing_stage_timed_out": {
          "type": "boolean"
        },
        "installing_stage_percentage": {
          "type": "integer"
        },
        "preparing_for_installation_stage_percentage": {
          "type": "integer"
        },
        "total_percentage": {
          "type": "integer"
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:progress_\""
    },
    "cluster-validation-id": {
      "type": "string",
      "enum": [
        "machine-cidr-defined",
        "cluster-cidr-defined",
        "service-cidr-defined",
        "no-cidrs-overlapping",
        "networks-same-address-families",
        "network-prefix-valid",
        "machine-cidr-equals-to-calculated-cidr",
        "api-vips-defined",
        "api-vips-valid",
        "ingress-vips-defined",
        "ingress-vips-valid",
        "all-hosts-are-ready-to-install",
        "sufficient-masters-count",
        "dns-domain-defined",
        "pull-secret-set",
        "ntp-server-configured",
        "lso-requirements-satisfied",
        "ocs-requirements-satisfied",
        "odf-requirements-satisfied",
        "cnv-requirements-satisfied",
        "lvm-requirements-satisfied",
        "mce-requirements-satisfied",
        "mtv-requirements-satisfied",
        "osc-requirements-satisfied",
        "network-type-valid",
        "platform-requirements-satisfied",
        "node-feature-discovery-requirements-satisfied",
        "nvidia-gpu-requirements-satisfied",
        "pipelines-requirements-satisfied",
        "servicemesh-requirements-satisfied",
        "serverless-requirements-satisfied",
        "openshift-ai-requirements-satisfied",
        "authorino-requirements-satisfied",
        "nmstate-requirements-satisfied",
        "amd-gpu-requirements-satisfied",
        "kmm-requirements-satisfied",
        "node-healthcheck-requirements-satisfied",
        "self-node-remediation-requirements-satisfied",
        "fence-agents-remediation-requirements-satisfied",
        "node-maintenance-requirements-satisfied",
        "kube-descheduler-requirements-satisfied"
      ]
    },
    "cluster_default_config": {
      "type": "object",
      "properties": {
        "cluster_network_cidr": {
          "type": "string",
          "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[\\/]([1-9]|[1-2][0-9]|3[0-2]?)$"
        },
        "cluster_network_host_prefix": {
          "type": "integer",
          "maximum": 32,
          "minimum": 1
        },
        "cluster_networks_dualstack": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/cluster_network"
          }
        },
        "cluster_networks_ipv4": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/cluster_network"
          }
        },
        "forbidden_hostnames": {
          "description": "This provides a list of forbidden hostnames. If this list is empty or not present, this implies that the UI should fall back to a hard coded list.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "inactive_deletion_hours": {
          "type": "integer"
        },
        "ntp_source": {
          "type": "string",
          "x-omitempty": false
        },
        "service_network_cidr": {
          "type": "string",
          "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[\\/]([1-9]|[1-2][0-9]|3[0-2]?)$"
        },
        "service_networks_dualstack": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/service_network"
          }
        },
        "service_networks_ipv4": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/service_network"
          }
        }
      }
    },
    "cluster_network": {
      "description": "A network from which Pod IPs are allocated. This block must not overlap with existing physical networks. These IP addresses are used for the Pod network, and if you need to access the Pods from an external network, configure load balancers and routers to manage the traffic.",
      "type": "object",
      "properties": {
        "cidr": {
          "description": "The IP block address pool.",
          "$ref": "#/definitions/subnet"
        },
        "cluster_id": {
          "description": "The cluster that this network is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "host_prefix": {
          "description": "The subnet prefix length to assign to each individual node. For example if is set to 23, then each node is assigned a /23 subnet out of the given CIDR, which allows for 510 (2^(32 - 23) - 2) pod IPs addresses.",
          "type": "integer",
          "maximum": 128,
          "minimum": 1
        }
      }
    },
    "completion-params": {
      "type": "object",
      "required": [
        "is_success"
      ],
      "properties": {
        "data": {
          "description": "additional data from the cluster",
          "type": "object",
          "additionalProperties": {
            "type": "object"
          }
        },
        "error_info": {
          "type": "string"
        },
        "is_success": {
          "type": "boolean"
        }
      }
    },
    "connectivity-check-host": {
      "type": "object",
      "properties": {
        "host_id": {
          "type": "string",
          "format": "uuid"
        },
        "nics": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/connectivity-check-nic"
          }
        }
      }
    },
    "connectivity-check-nic": {
      "type": "object",
      "properties": {
        "ip_addresses": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3})|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,}))$"
          }
        },
        "mac": {
          "type": "string",
          "format": "mac"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "connectivity-check-params": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/connectivity-check-host"
      }
    },
    "connectivity-remote-host": {
      "type": "object",
      "properties": {
        "host_id": {
          "type": "string",
          "format": "uuid"
        },
        "l2_connectivity": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/l2-connectivity"
          }
        },
        "l3_connectivity": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/l3-connectivity"
          }
        },
        "mtu_report": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/mtu-report"
          }
        }
      }
    },
    "connectivity-report": {
      "type": "object",
      "properties": {
        "remote_hosts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/connectivity-remote-host"
          }
        }
      }
    },
    "container_image_availability": {
      "type": "object",
      "properties": {
        "download_rate": {
          "description": "The rate of size/time in seconds MBps.",
          "type": "number"
        },
        "name": {
          "description": "A fully qualified image name (FQIN).",
          "type": "string"
        },
        "result": {
          "$ref": "#/definitions/container_image_availability_result"
        },
        "size_bytes": {
          "description": "Size of the image in bytes.",
          "type": "number"
        },
        "time": {
          "description": "Seconds it took to pull the image.",
          "type": "number"
        }
      }
    },
    "container_image_availability_request": {
      "type": "object",
      "required": [
        "images"
      ],
      "properties": {
        "images": {
          "description": "List of image names to be checked.",
          "type": "array",
          "items": {
            "description": "A fully qualified image name (FQIN).",
            "type": "string",
            "pattern": "^(([a-zA-Z0-9\\-\\.]+)(:[0-9]+)?\\/)?[a-z0-9\\._\\-\\/@]+[?::a-zA-Z0-9_\\-.]+$"
          }
        },
        "timeout": {
          "description": "Positive number represents a timeout in seconds for a pull operation.",
          "type": "integer"
        }
      }
    },
    "container_image_availability_response": {
      "type": "object",
      "required": [
        "images"
      ],
      "properties": {
        "images": {
          "description": "List of images that were checked.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/container_image_availability"
          }
        }
      }
    },
    "container_image_availability_result": {
      "description": "Image availability result.",
      "type": "string",
      "enum": [
        "success",
        "failure"
      ]
    },
    "cpu": {
      "type": "object",
      "properties": {
        "architecture": {
          "type": "string"
        },
        "count": {
          "type": "integer"
        },
        "flags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "frequency": {
          "type": "number"
        },
        "model_name": {
          "type": "string"
        }
      }
    },
    "create-manifest-params": {
      "type": "object",
      "required": [
        "file_name",
        "content"
      ],
      "properties": {
        "content": {
          "description": "base64 encoded manifest content.",
          "type": "string"
        },
        "file_name": {
          "description": "The name of the manifest to customize the installed OCP cluster.",
          "type": "string",
          "pattern": "^[^\\/]*\\.(json|ya?ml(\\.patch_?[a-zA-Z0-9_]*)?)$"
        },
        "folder": {
          "description": "The folder that contains the files. Manifests can be placed in 'manifests' or 'openshift' directories.",
          "type": "string",
          "default": "manifests",
          "enum": [
            "manifests",
            "openshift"
          ]
        }
      }
    },
    "credentials": {
      "type": "object",
      "properties": {
        "console_url": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "dhcp_allocation_request": {
      "type": "object",
      "required": [
        "interface",
        "api_vip_mac",
        "ingress_vip_mac"
      ],
      "properties": {
        "api_vip_lease": {
          "description": "Contents of lease file to be used for API virtual IP.",
          "type": "string"
        },
        "api_vip_mac": {
          "description": "MAC address for the API virtual IP.",
          "type": "string",
          "format": "mac"
        },
        "ingress_vip_lease": {
          "description": "Contents of lease file to be used for for Ingress virtual IP.",
          "type": "string"
        },
        "ingress_vip_mac": {
          "description": "MAC address for the Ingress virtual IP.",
          "type": "string",
          "format": "mac"
        },
        "interface": {
          "description": "The network interface (NIC) to run the DHCP requests on.",
          "type": "string"
        }
      }
    },
    "dhcp_allocation_response": {
      "type": "object",
      "required": [
        "api_vip_address",
        "ingress_vip_address"
      ],
      "properties": {
        "api_vip_address": {
          "description": "The IPv4 address that was allocated by DHCP for the API virtual IP.",
          "type": "string",
          "format": "ipv4"
        },
        "api_vip_lease": {
          "description": "Contents of last acquired lease for API virtual IP.",
          "type": "string"
        },
        "ingress_vip_address": {
          "description": "The IPv4 address that was allocated by DHCP for the Ingress virtual IP.",
          "type": "string",
          "format": "ipv4"
        },
        "ingress_vip_lease": {
          "description": "Contents of last acquired lease for Ingress virtual IP.",
          "type": "string"
        }
      }
    },
    "disk": {
      "type": "object",
      "properties": {
        "bootable": {
          "type": "boolean"
        },
        "by_id": {
          "description": "by-id is the World Wide Number of the device which guaranteed to be unique for every storage device",
          "type": "string"
        },
        "by_path": {
          "description": "by-path is the shortest physical path to the device",
          "type": "string"
        },
        "drive_type": {
          "$ref": "#/definitions/drive_type"
        },
        "has_uuid": {
          "type": "boolean"
        },
        "hctl": {
          "type": "string"
        },
        "holders": {
          "description": "A comma-separated list of disk names that this disk belongs to",
          "type": "string"
        },
        "id": {
          "description": "Determine the disk's unique identifier which is the by-id field if it exists and fallback to the by-path field otherwise",
          "type": "string"
        },
        "installation_eligibility": {
          "type": "object",
          "properties": {
            "eligible": {
              "description": "Whether the disk is eligible for installation or not.",
              "type": "boolean"
            },
            "not_eligible_reasons": {
              "description": "Reasons for why this disk is not eligible for installation.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "x-nullable": false
        },
        "io_perf": {
          "$ref": "#/definitions/io_perf"
        },
        "is_installation_media": {
          "description": "Whether the disk appears to be an installation media or not",
          "type": "boolean"
        },
        "iscsi": {
          "$ref": "#/definitions/iscsi"
        },
        "model": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "partitionTypes": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "removable": {
          "type": "boolean"
        },
        "serial": {
          "type": "string"
        },
        "size_bytes": {
          "type": "integer"
        },
        "smart": {
          "type": "string"
        },
        "vendor": {
          "type": "string"
        },
        "wwn": {
          "type": "string"
        }
      }
    },
    "disk-config-params": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "role": {
          "$ref": "#/definitions/disk-role"
        }
      }
    },
    "disk-encryption": {
      "type": "object",
      "properties": {
        "enable_on": {
          "description": "Enable/disable disk encryption on master nodes, arbiter nodes, worker nodes, or a combination of them.",
          "type": "string",
          "default": "none",
          "enum": [
            "none",
            "masters",
            "arbiters",
            "workers",
            "masters,arbiters",
            "masters,workers",
            "arbiters,workers",
            "masters,arbiters,workers",
            "all"
          ]
        },
        "mode": {
          "description": "The disk encryption mode to use.",
          "type": "string",
          "default": "tpmv2",
          "enum": [
            "tpmv2",
            "tang"
          ]
        },
        "tang_servers": {
          "description": "JSON-formatted string containing additional information regarding tang's configuration",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\"",
          "example": "[{\"url\":\"http://tang.example.com:7500\",\"thumbprint\":\"PLjNyRdGw03zlRoGjQYMahSZGu9\"}, {\"url\":\"http://tang.example.com:7501\",\"thumbprint\":\"PLjNyRdGw03zlRoGjQYMahSZGu8\"}]"
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:disk_encryption_\""
    },
    "disk-role": {
      "type": "string",
      "enum": [
        "none",
        "install"
      ]
    },
    "disk-skip-formatting-params": {
      "description": "Allows an addition or removal of a host disk from the host's skip_formatting_disks list",
      "type": "object",
      "required": [
        "disk_id",
        "skip_formatting"
      ],
      "properties": {
        "disk_id": {
          "description": "The ID of the disk that is being added to or removed from the host's skip_formatting_disks list",
          "type": "string"
        },
        "skip_formatting": {
          "description": "True if you wish to add the disk to the skip_formatting_disks list, false if you wish to remove it",
          "type": "boolean"
        }
      }
    },
    "disk_info": {
      "type": "object",
      "properties": {
        "disk_speed": {
          "$ref": "#/definitions/disk_speed"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "path": {
          "type": "string"
        }
      }
    },
    "disk_speed": {
      "type": "object",
      "properties": {
        "exit_code": {
          "type": "integer"
        },
        "speed_ms": {
          "type": "integer"
        },
        "tested": {
          "type": "boolean"
        }
      }
    },
    "disk_speed_check_request": {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "description": "--filename argument for fio (expects a file or a block device path).",
          "type": "string"
        }
      }
    },
    "disk_speed_check_response": {
      "type": "object",
      "properties": {
        "io_sync_duration": {
          "description": "The 99th percentile of fdatasync durations in milliseconds.",
          "type": "integer"
        },
        "path": {
          "description": "The device path.",
          "type": "string"
        }
      }
    },
    "domain_resolution_request": {
      "type": "object",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "object",
            "x-go-type": {
              "import": {
                "path": "github.com/openshift/assisted-service/models"
              },
              "type": "DomainResolutionRequestDomain"
            }
          }
        }
      }
    },
    "domain_resolution_response": {
      "type": "object",
      "required": [
        "resolutions"
      ],
      "properties": {
        "resolutions": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "domain_name"
            ],
            "properties": {
              "cnames": {
                "description": "The cnames that were resolved for the domain, empty if none",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "domain_name": {
                "description": "The domain that was resolved",
                "type": "string"
              },
              "ipv4_addresses": {
                "description": "The IPv4 addresses of the domain, empty if none",
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "ipv4"
                }
              },
              "ipv6_addresses": {
                "description": "The IPv6 addresses of the domain, empty if none",
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "ipv6"
                }
              }
            },
            "x-go-name": "DomainResolutionResponseDomain"
          }
        }
      }
    },
    "download_boot_artifacts_request": {
      "description": "Information sent to the agent for downloading artifacts to boot a host into discovery.",
      "type": "object",
      "required": [
        "kernel_url",
        "rootfs_url",
        "initrd_url",
        "host_fs_mount_dir"
      ],
      "properties": {
        "host_fs_mount_dir": {
          "description": "The base directory on the host that contains the /boot folder. The host will download boot\nartifacts into a folder in this directory.",
          "type": "string"
        },
        "initrd_url": {
          "description": "URL address to download the initrd.",
          "type": "string"
        },
        "kernel_url": {
          "description": "URL address to download the kernel.",
          "type": "string"
        },
        "rootfs_url": {
          "description": "URL address to download the rootfs.",
          "type": "string"
        }
      }
    },
    "drive_type": {
      "type": "string",
      "enum": [
        "Unknown",
        "HDD",
        "FDD",
        "ODD",
        "SSD",
        "virtual",
        "Multipath",
        "iSCSI",
        "FC",
        "LVM",
        "RAID",
        "ECKD",
        "ECKD (ESE)",
        "FBA"
      ]
    },
    "error": {
      "type": "object",
      "required": [
        "kind",
        "id",
        "href",
        "code",
        "reason"
      ],
      "properties": {
        "code": {
          "description": "Globally unique code of the error, composed of the unique identifier of the API and the numeric identifier of the error. For example, if the numeric identifier of the error is 93 and the identifier of the API is assisted_install then the code will be ASSISTED-INSTALL-93.",
          "type": "string"
        },
        "href": {
          "description": "Self link.",
          "type": "string"
        },
        "id": {
          "description": "Numeric identifier of the error.",
          "type": "integer",
          "format": "int32",
          "maximum": 504,
          "minimum": 400
        },
        "kind": {
          "description": "Indicates the type of this object. Will always be 'Error'.",
          "type": "string",
          "enum": [
            "Error"
          ]
        },
        "reason": {
          "description": "Human-readable description of the error.",
          "type": "string"
        }
      }
    },
    "event": {
      "type": "object",
      "required": [
        "severity",
        "message",
        "event_time"
      ],
      "properties": {
        "category": {
          "type": "string",
          "enum": [
            "user",
            "metrics"
          ],
          "x-go-custom-tag": "gorm:\"default:'user'\""
        },
        "cluster_id": {
          "description": "Unique identifier of the cluster this event relates to.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"index\"",
          "x-nullable": true
        },
        "event_time": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "host_id": {
          "description": "Unique identifier of the host this event relates to.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"index\"",
          "x-nullable": true
        },
        "infra_env_id": {
          "description": "Unique identifier of the infra-env this event relates to.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"index\"",
          "x-nullable": true
        },
        "message": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:varchar(4096)\""
        },
        "name": {
          "description": "Event Name.",
          "type": "string"
        },
        "props": {
          "description": "Additional properties for the event in JSON format.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "request_id": {
          "description": "Unique identifier of the request that caused this event to occur.",
          "type": "string",
          "format": "uuid"
        },
        "severity": {
          "type": "string",
          "enum": [
            "info",
            "warning",
            "error",
            "critical"
          ]
        }
      }
    },
    "event-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/event"
      }
    },
    "feature-support-level-id": {
      "type": "string",
      "enum": [
        "SNO",
        "TNA",
        "VIP_AUTO_ALLOC",
        "CUSTOM_MANIFEST",
        "SINGLE_NODE_EXPANSION",
        "LVM",
        "ODF",
        "LSO",
        "CNV",
        "MCE",
        "MTV",
        "OSC",
        "NUTANIX_INTEGRATION",
        "BAREMETAL_PLATFORM",
        "NONE_PLATFORM",
        "VSPHERE_INTEGRATION",
        "DUAL_STACK_VIPS",
        "CLUSTER_MANAGED_NETWORKING",
        "USER_MANAGED_NETWORKING",
        "MINIMAL_ISO",
        "FULL_ISO",
        "EXTERNAL_PLATFORM_OCI",
        "DUAL_STACK",
        "PLATFORM_MANAGED_NETWORKING",
        "EXTERNAL_PLATFORM",
        "OVN_NETWORK_TYPE",
        "SDN_NETWORK_TYPE",
        "NODE_FEATURE_DISCOVERY",
        "NVIDIA_GPU",
        "PIPELINES",
        "SERVICEMESH",
        "SERVERLESS",
        "OPENSHIFT_AI",
        "NON_STANDARD_HA_CONTROL_PLANE",
        "AUTHORINO",
        "USER_MANAGED_LOAD_BALANCER",
        "NMSTATE",
        "AMD_GPU",
        "KMM",
        "NODE_HEALTHCHECK",
        "SELF_NODE_REMEDIATION",
        "FENCE_AGENTS_REMEDIATION",
        "NODE_MAINTENANCE",
        "KUBE_DESCHEDULER"
      ]
    },
    "finalizing-stage": {
      "description": "Cluster finalizing stage managed by controller",
      "type": "string",
      "enum": [
        "Waiting for cluster operators",
        "Adding router ca",
        "Applying olm manifests",
        "Waiting for olm operators csv initialization",
        "Waiting for olm operators csv",
        "Waiting for OLM operator setup jobs",
        "Done"
      ]
    },
    "free-addresses-list": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "ipv4"
      }
    },
    "free_addresses_request": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}\\/[0-9]|[1-2][0-9]|3[0-2]?$"
      }
    },
    "free_network_addresses": {
      "type": "object",
      "properties": {
        "free_addresses": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "ipv4"
          }
        },
        "network": {
          "type": "string",
          "pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}\\/[0-9]|[1-2][0-9]|3[0-2]?$"
        }
      }
    },
    "free_networks_addresses": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/free_network_addresses"
      }
    },
    "gpu": {
      "type": "object",
      "properties": {
        "address": {
          "description": "Device address (for example \"0000:00:02.0\")",
          "type": "string"
        },
        "device_id": {
          "description": "ID of the device (for example \"3ea0\")",
          "type": "string"
        },
        "name": {
          "description": "Product name of the device (for example \"UHD Graphics 620 (Whiskey Lake)\")",
          "type": "string"
        },
        "vendor": {
          "description": "The name of the device vendor (for example \"Intel Corporation\")",
          "type": "string"
        },
        "vendor_id": {
          "description": "ID of the vendor (for example \"8086\")",
          "type": "string"
        }
      }
    },
    "host": {
      "type": "object",
      "required": [
        "kind",
        "id",
        "href",
        "status",
        "status_info"
      ],
      "properties": {
        "api_vip_connectivity": {
          "description": "Contains a serialized api_vip_connectivity_response",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "bootstrap": {
          "type": "boolean"
        },
        "checked_in_at": {
          "description": "The last time the host's agent communicated with the service.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "cluster_id": {
          "description": "The cluster that this host is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"foreignkey:Cluster\"",
          "x-nullable": true
        },
        "connection_timed_out": {
          "description": "Indicate that connection to assisted service was timed out when soft timeout is enabled.",
          "type": "boolean"
        },
        "connectivity": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "deleted_at": {
          "description": "swagger:ignore",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone;index\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "gorm.io/gorm"
            },
            "type": "DeletedAt"
          },
          "x-nullable": false
        },
        "discovery_agent_version": {
          "type": "string"
        },
        "disks_info": {
          "description": "Additional information about disks, formatted as JSON.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "disks_to_be_formatted": {
          "description": "A comma-separated list of disks that will be formatted once\ninstallation begins, unless otherwise set to be skipped by\nskip_formatting_disks. This means that this list also includes disks\nthat appear in skip_formatting_disks. This property is managed by the\nservice and cannot be modified by the user.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "domain_name_resolutions": {
          "description": "The domain name resolution result.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "free_addresses": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "href": {
          "description": "Self link.",
          "type": "string"
        },
        "id": {
          "description": "Unique identifier of the object.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "ignition_config_overrides": {
          "description": "Json formatted string containing the user overrides for the host's pointer ignition",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\"",
          "example": "{\"ignition\": {\"version\": \"3.1.0\"}, \"storage\": {\"files\": [{\"path\": \"/tmp/example\", \"contents\": {\"source\": \"data:text/plain;base64,aGVscGltdHJhcHBlZGluYXN3YWdnZXJzcGVj\"}}]}}"
        },
        "ignition_endpoint_token_set": {
          "description": "True if the token to fetch the ignition from ignition_endpoint_url is set.",
          "type": "boolean"
        },
        "images_status": {
          "description": "Array of image statuses.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "infra_env_id": {
          "description": "The infra-env that this host is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey;foreignkey:InfraEnvID\""
        },
        "installation_disk_id": {
          "description": "Contains the inventory disk id to install on.",
          "type": "string"
        },
        "installation_disk_path": {
          "description": "Contains the inventory disk path, This field is replaced by installation_disk_id field and used for backward compatability with the old UI.",
          "type": "string",
          "example": "/dev/sda"
        },
        "installer_args": {
          "type": "string"
        },
        "installer_version": {
          "description": "Installer version.",
          "type": "string"
        },
        "inventory": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "kind": {
          "description": "Indicates the type of this object. Will be 'Host' if this is a complete object or 'HostLink' if it is just a link, or\n'AddToExistingClusterHost' for host being added to existing OCP cluster, or\n",
          "type": "string",
          "enum": [
            "Host",
            "AddToExistingClusterHost"
          ]
        },
        "logs_collected_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "logs_info": {
          "description": "The progress of log collection or empty if logs are not applicable",
          "$ref": "#/definitions/logs_state"
        },
        "logs_started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "machine_config_pool_name": {
          "type": "string"
        },
        "media_status": {
          "type": "string",
          "default": "connected",
          "enum": [
            "connected",
            "disconnected"
          ],
          "x-nullable": true
        },
        "node_labels": {
          "description": "Json containing node's labels.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "ntp_sources": {
          "description": "The configured NTP sources on the host.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "progress": {
          "$ref": "#/definitions/host-progress-info"
        },
        "progress_stages": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/host-stage"
          },
          "x-go-custom-tag": "gorm:\"-\"",
          "x-nullable": true
        },
        "registered_at": {
          "description": "The last time the host's agent tried to register in the service.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "requested_hostname": {
          "type": "string"
        },
        "role": {
          "$ref": "#/definitions/host-role"
        },
        "skip_formatting_disks": {
          "description": "A comma-seperated list of host disks that the service will avoid\nformatting.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "stage_started_at": {
          "description": "Time at which the current progress stage started.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "stage_updated_at": {
          "description": "Time at which the current progress stage was last updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "status": {
          "type": "string",
          "enum": [
            "discovering",
            "known",
            "disconnected",
            "insufficient",
            "disabled",
            "preparing-for-installation",
            "preparing-failed",
            "preparing-successful",
            "pending-for-input",
            "installing",
            "installing-in-progress",
            "installing-pending-user-action",
            "resetting-pending-user-action",
            "installed",
            "error",
            "resetting",
            "added-to-existing-cluster",
            "cancelled",
            "binding",
            "unbinding",
            "unbinding-pending-user-action",
            "known-unbound",
            "disconnected-unbound",
            "insufficient-unbound",
            "disabled-unbound",
            "discovering-unbound",
            "reclaiming",
            "reclaiming-rebooting"
          ]
        },
        "status_info": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:varchar(2048)\""
        },
        "status_updated_at": {
          "description": "The last time that the host status was updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "suggested_role": {
          "$ref": "#/definitions/host-role"
        },
        "tang_connectivity": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "timestamp": {
          "description": "The time on the host as seconds since the Unix epoch.",
          "type": "integer"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "user_name": {
          "type": "string"
        },
        "validations_info": {
          "description": "JSON-formatted string containing the validation results for each validation id grouped by category (network, hardware, etc.)",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        }
      }
    },
    "host-create-params": {
      "type": "object",
      "required": [
        "host_id"
      ],
      "properties": {
        "discovery_agent_version": {
          "type": "string"
        },
        "host_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "host-ignition-params": {
      "properties": {
        "config": {
          "type": "string"
        }
      }
    },
    "host-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/host"
      }
    },
    "host-progress": {
      "type": "object",
      "properties": {
        "current_stage": {
          "$ref": "#/definitions/host-stage"
        },
        "progress_info": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:varchar(2048)\""
        }
      }
    },
    "host-progress-info": {
      "type": "object",
      "properties": {
        "current_stage": {
          "$ref": "#/definitions/host-stage"
        },
        "installation_percentage": {
          "type": "integer"
        },
        "progress_info": {
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:varchar(2048)\""
        },
        "stage_started_at": {
          "description": "Time at which the current progress stage started.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "stage_timed_out": {
          "description": "Indicate of the current stage has been timed out.",
          "type": "boolean"
        },
        "stage_updated_at": {
          "description": "Time at which the current progress stage was last updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:progress_\""
    },
    "host-role": {
      "type": "string",
      "enum": [
        "auto-assign",
        "master",
        "arbiter",
        "worker",
        "bootstrap"
      ]
    },
    "host-role-update-params": {
      "type": "string",
      "enum": [
        "auto-assign",
        "master",
        "arbiter",
        "worker"
      ]
    },
    "host-stage": {
      "type": "string",
      "enum": [
        "Starting installation",
        "Waiting for control plane",
        "Waiting for bootkube",
        "Waiting for controller",
        "Installing",
        "Writing image to disk",
        "Rebooting",
        "Waiting for ignition",
        "Configuring",
        "Joined",
        "Done",
        "Failed"
      ]
    },
    "host-type-hardware-requirements": {
      "type": "object",
      "properties": {
        "qualitative": {
          "description": "Host requirements that cannot be quantified at the time of calculation. Descriptions or formulas of requiements",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "quantitative": {
          "description": "Host requirements that can be quantified",
          "$ref": "#/definitions/cluster-host-requirements-details"
        }
      }
    },
    "host-type-hardware-requirements-wrapper": {
      "type": "object",
      "properties": {
        "master": {
          "description": "Requirements towards a master node",
          "$ref": "#/definitions/host-type-hardware-requirements"
        },
        "worker": {
          "description": "Requirements towards a worker node",
          "$ref": "#/definitions/host-type-hardware-requirements"
        }
      }
    },
    "host-update-params": {
      "type": "object",
      "properties": {
        "disks_selected_config": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/disk-config-params"
          },
          "x-nullable": true
        },
        "disks_skip_formatting": {
          "description": "Allows changing the host's skip_formatting_disks parameter",
          "type": "array",
          "items": {
            "$ref": "#/definitions/disk-skip-formatting-params"
          },
          "x-nullable": true
        },
        "host_name": {
          "type": "string",
          "x-nullable": true
        },
        "host_role": {
          "type": "string",
          "enum": [
            "auto-assign",
            "master",
            "arbiter",
            "worker"
          ],
          "x-nullable": true
        },
        "ignition_endpoint_http_headers": {
          "description": "JSON-formatted string of additional HTTP headers when fetching the ignition.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ignition-endpoint-http-headers-params"
          },
          "x-nullable": true
        },
        "ignition_endpoint_token": {
          "description": "A string which will be used as Authorization Bearer token to fetch the ignition from ignition_endpoint_url.",
          "type": "string",
          "x-nullable": true
        },
        "machine_config_pool_name": {
          "type": "string",
          "x-nullable": true
        },
        "node_labels": {
          "description": "Labels to be added to the corresponding node.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/node-label-params"
          },
          "x-nullable": true
        }
      }
    },
    "host-validation-id": {
      "type": "string",
      "enum": [
        "connected",
        "media-connected",
        "has-inventory",
        "has-min-cpu-cores",
        "has-min-valid-disks",
        "has-min-memory",
        "machine-cidr-defined",
        "has-cpu-cores-for-role",
        "has-memory-for-role",
        "hostname-unique",
        "hostname-valid",
        "belongs-to-machine-cidr",
        "ignition-downloadable",
        "belongs-to-majority-group",
        "valid-platform-network-settings",
        "ntp-synced",
        "time-synced-between-host-and-service",
        "container-images-available",
        "lso-requirements-satisfied",
        "ocs-requirements-satisfied",
        "odf-requirements-satisfied",
        "lvm-requirements-satisfied",
        "mce-requirements-satisfied",
        "mtv-requirements-satisfied",
        "osc-requirements-satisfied",
        "sufficient-installation-disk-speed",
        "cnv-requirements-satisfied",
        "sufficient-network-latency-requirement-for-role",
        "sufficient-packet-loss-requirement-for-role",
        "has-default-route",
        "api-domain-name-resolved-correctly",
        "api-int-domain-name-resolved-correctly",
        "apps-domain-name-resolved-correctly",
        "release-domain-name-resolved-correctly",
        "compatible-with-cluster-platform",
        "dns-wildcard-not-configured",
        "disk-encryption-requirements-satisfied",
        "non-overlapping-subnets",
        "vsphere-disk-uuid-enabled",
        "compatible-agent",
        "no-skip-installation-disk",
        "no-skip-missing-disk",
        "no-ip-collisions-in-network",
        "no-iscsi-nic-belongs-to-machine-cidr",
        "node-feature-discovery-requirements-satisfied",
        "nvidia-gpu-requirements-satisfied",
        "pipelines-requirements-satisfied",
        "servicemesh-requirements-satisfied",
        "serverless-requirements-satisfied",
        "openshift-ai-requirements-satisfied",
        "authorino-requirements-satisfied",
        "mtu-valid",
        "nmstate-requirements-satisfied",
        "amd-gpu-requirements-satisfied",
        "kmm-requirements-satisfied",
        "node-healthcheck-requirements-satisfied",
        "self-node-remediation-requirements-satisfied",
        "fence-agents-remediation-requirements-satisfied",
        "node-maintenance-requirements-satisfied",
        "kube-descheduler-requirements-satisfied"
      ]
    },
    "host_network": {
      "type": "object",
      "properties": {
        "cidr": {
          "type": "string"
        },
        "host_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        }
      }
    },
    "host_registration_response": {
      "allOf": [
        {
          "$ref": "#/definitions/host"
        },
        {
          "properties": {
            "next_step_runner_command": {
              "description": "Command for starting the next step runner",
              "type": "object",
              "properties": {
                "args": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "command": {
                  "type": "string"
                },
                "retry_seconds": {
                  "description": "How long in seconds to wait before retrying registration if the command fails",
                  "type": "integer"
                }
              }
            }
          }
        }
      ]
    },
    "host_static_network_config": {
      "type": "object",
      "properties": {
        "mac_interface_map": {
          "description": "mapping of host macs to logical interfaces used in the network yaml",
          "$ref": "#/definitions/mac_interface_map"
        },
        "network_yaml": {
          "description": "yaml string that can be processed by nmstate",
          "type": "string"
        }
      }
    },
    "ignition-endpoint": {
      "description": "Explicit ignition endpoint overrides the default ignition endpoint.",
      "type": "object",
      "properties": {
        "ca_certificate": {
          "description": "base64 encoded CA certficate to be used when contacting the URL via https.",
          "type": "string",
          "x-nullable": true
        },
        "url": {
          "description": "The URL for the ignition endpoint.",
          "type": "string",
          "x-nullable": true
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:ignition_endpoint_\""
    },
    "ignition-endpoint-http-headers-params": {
      "type": "object",
      "required": [
        "key",
        "value"
      ],
      "properties": {
        "key": {
          "description": "The key for the http header's key-value pair.",
          "type": "string"
        },
        "value": {
          "description": "The value for the http header's key-value pair.",
          "type": "string"
        }
      }
    },
    "ignored-validations": {
      "type": "object",
      "properties": {
        "cluster-validation-ids": {
          "description": "JSON-formatted list of cluster validation IDs that will be ignored for all hosts that belong to this cluster. It may also contain a list with a single string \"all\" to ignore all cluster validations. Some validations cannot be ignored.",
          "type": "string",
          "format": "string"
        },
        "host-validation-ids": {
          "description": "JSON-formatted list of host validation IDs that will be ignored for all hosts that belong to this cluster. It may also contain a list with a single string \"all\" to ignore all host validations. Some validations cannot be ignored.",
          "type": "string",
          "format": "string"
        }
      }
    },
    "image-create-params": {
      "type": "object",
      "properties": {
        "image_type": {
          "description": "Type of image that should be generated.",
          "$ref": "#/definitions/image_type"
        },
        "ssh_public_key": {
          "description": "SSH public key for debugging the installation.",
          "type": "string"
        },
        "static_network_config": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/host_static_network_config"
          }
        }
      }
    },
    "image_info": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "download_url": {
          "type": "string"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "generator_version": {
          "description": "Image generator version.",
          "type": "string"
        },
        "size_bytes": {
          "type": "integer"
        },
        "ssh_public_key": {
          "description": "SSH public key for debugging the installation.",
          "type": "string"
        },
        "static_network_config": {
          "description": "static network configuration string in the format expected by discovery ignition generation",
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/image_type"
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:image_\""
    },
    "image_type": {
      "type": "string",
      "enum": [
        "full-iso",
        "minimal-iso"
      ]
    },
    "import-cluster-params": {
      "type": "object",
      "required": [
        "name",
        "api_vip_dnsname",
        "openshift_cluster_id"
      ],
      "properties": {
        "api_vip_dnsname": {
          "description": "The domain name used to reach the OpenShift cluster API.",
          "type": "string"
        },
        "name": {
          "description": "OpenShift cluster name.",
          "type": "string"
        },
        "openshift_cluster_id": {
          "description": "The id of the OCP cluster, that hosts will be added to",
          "type": "string",
          "format": "uuid"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string"
        }
      }
    },
    "infra-env": {
      "type": "object",
      "required": [
        "kind",
        "id",
        "href",
        "name",
        "type",
        "updated_at",
        "created_at"
      ],
      "properties": {
        "additional_ntp_sources": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string"
        },
        "additional_trust_bundle": {
          "description": "PEM-encoded X.509 certificate bundle. Hosts discovered by this\ninfra-env will trust the certificates in this bundle. Clusters formed\nfrom the hosts discovered by this infra-env will also trust the\ncertificates in this bundle.",
          "type": "string",
          "x-nullable": false
        },
        "cluster_id": {
          "description": "If set, all hosts that register will be associated with the specified cluster.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"index\""
        },
        "cpu_architecture": {
          "description": "The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x"
          ],
          "x-nullable": false
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "download_url": {
          "type": "string"
        },
        "email_domain": {
          "type": "string"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "generator_version": {
          "description": "Image generator version.",
          "type": "string"
        },
        "href": {
          "description": "Self link.",
          "type": "string"
        },
        "id": {
          "description": "Unique identifier of the object.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "ignition_config_override": {
          "description": "Json formatted string containing the user overrides for the initial ignition config.",
          "type": "string"
        },
        "kernel_arguments": {
          "description": "JSON formatted string array representing the discovery image kernel arguments.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\"",
          "x-nullable": true
        },
        "kind": {
          "description": "Indicates the type of this object.",
          "type": "string",
          "enum": [
            "InfraEnv"
          ]
        },
        "name": {
          "description": "Name of the infra-env.",
          "type": "string"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster (used to infer the RHCOS version - temporary until generic logic implemented).",
          "type": "string"
        },
        "org_id": {
          "type": "string"
        },
        "proxy": {
          "$ref": "#/definitions/proxy"
        },
        "pull_secret_set": {
          "description": "True if the pull secret has been added to the cluster.",
          "type": "boolean"
        },
        "size_bytes": {
          "type": "integer"
        },
        "ssh_authorized_key": {
          "description": "SSH public key for debugging the installation.",
          "type": "string"
        },
        "static_network_config": {
          "description": "static network configuration string in the format expected by discovery ignition generation.",
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/image_type"
        },
        "updated_at": {
          "description": "The last time that this infra-env was updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "time"
            },
            "type": "Time"
          }
        },
        "user_name": {
          "type": "string"
        }
      }
    },
    "infra-env-create-params": {
      "type": "object",
      "required": [
        "name",
        "pull_secret"
      ],
      "properties": {
        "additional_ntp_sources": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string",
          "x-nullable": true
        },
        "additional_trust_bundle": {
          "description": "PEM-encoded X.509 certificate bundle. Hosts discovered by this\ninfra-env will trust the certificates in this bundle. Clusters formed\nfrom the hosts discovered by this infra-env will also trust the\ncertificates in this bundle.",
          "type": "string",
          "maxLength": 65535,
          "x-nullable": false
        },
        "cluster_id": {
          "description": "If set, all hosts that register will be associated with the specified cluster.",
          "type": "string",
          "format": "uuid",
          "x-nullable": true
        },
        "cpu_architecture": {
          "description": "The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x"
          ],
          "x-nullable": false
        },
        "ignition_config_override": {
          "description": "JSON formatted string containing the user overrides for the initial ignition config.",
          "type": "string"
        },
        "image_type": {
          "$ref": "#/definitions/image_type"
        },
        "kernel_arguments": {
          "$ref": "#/definitions/kernel_arguments"
        },
        "name": {
          "description": "Name of the infra-env.",
          "type": "string"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster (used to infer the RHCOS version - temporary until generic logic implemented).",
          "type": "string"
        },
        "proxy": {
          "$ref": "#/definitions/proxy"
        },
        "pull_secret": {
          "description": "The pull secret obtained from Red Hat OpenShift Cluster Manager at console.redhat.com/openshift/install/pull-secret.",
          "type": "string"
        },
        "ssh_authorized_key": {
          "description": "SSH public key for debugging the installation.",
          "type": "string",
          "x-nullable": true
        },
        "static_network_config": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/host_static_network_config"
          }
        }
      }
    },
    "infra-env-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/infra-env"
      }
    },
    "infra-env-update-params": {
      "type": "object",
      "properties": {
        "additional_ntp_sources": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string",
          "x-nullable": true
        },
        "additional_trust_bundle": {
          "description": "Allows users to change the additional_trust_bundle infra-env field",
          "type": "string",
          "maxLength": 65535,
          "x-nullable": true
        },
        "ignition_config_override": {
          "description": "JSON formatted string containing the user overrides for the initial ignition config.",
          "type": "string"
        },
        "image_type": {
          "$ref": "#/definitions/image_type"
        },
        "kernel_arguments": {
          "$ref": "#/definitions/kernel_arguments"
        },
        "openshift_version": {
          "description": "Version of the OS image",
          "type": "string",
          "x-nullable": true
        },
        "proxy": {
          "$ref": "#/definitions/proxy"
        },
        "pull_secret": {
          "description": "The pull secret obtained from Red Hat OpenShift Cluster Manager at console.redhat.com/openshift/install/pull-secret.",
          "type": "string"
        },
        "ssh_authorized_key": {
          "description": "SSH public key for debugging the installation.",
          "type": "string",
          "x-nullable": true
        },
        "static_network_config": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/host_static_network_config"
          }
        }
      }
    },
    "infra_error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "description": "Numeric identifier of the error.",
          "type": "integer",
          "format": "int32",
          "maximum": 403,
          "minimum": 401
        },
        "message": {
          "description": "Human-readable description of the error.",
          "type": "string"
        }
      }
    },
    "ingress-cert-params": {
      "type": "string"
    },
    "ingress_vip": {
      "description": "The virtual IP used for cluster ingress traffic.",
      "type": "object",
      "properties": {
        "cluster_id": {
          "description": "The cluster that this VIP is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "ip": {
          "description": "The IP address.",
          "$ref": "#/definitions/ip"
        },
        "verification": {
          "description": "Ingress VIP verification result.",
          "$ref": "#/definitions/vip_verification"
        }
      }
    },
    "install_cmd_request": {
      "type": "object",
      "required": [
        "cluster_id",
        "infra_env_id",
        "host_id",
        "role",
        "boot_device",
        "controller_image",
        "installer_image"
      ],
      "properties": {
        "boot_device": {
          "description": "Boot device to write image on",
          "type": "string"
        },
        "check_cvo": {
          "description": "Check CVO status if needed",
          "type": "boolean",
          "default": true
        },
        "cluster_id": {
          "description": "Cluster id",
          "type": "string",
          "format": "uuid"
        },
        "control_plane_count": {
          "description": "Specifies the required number of control plane nodes that should be part of the cluster.",
          "type": "integer"
        },
        "controller_image": {
          "description": "Assisted installer controller image",
          "type": "string",
          "pattern": "^(([a-zA-Z0-9\\-\\.]+)(:[0-9]+)?\\/)?[a-z0-9\\._\\-\\/@]+[?::a-zA-Z0-9_\\-.]+$"
        },
        "coreos_image": {
          "description": "CoreOS container image to use if installing to the local device",
          "type": "string"
        },
        "disks_to_format": {
          "description": "List of disks to format",
          "type": "array",
          "items": {
            "description": "Disk to format",
            "type": "string"
          }
        },
        "enable_skip_mco_reboot": {
          "description": "If true, assisted service will attempt to skip MCO reboot",
          "type": "boolean"
        },
        "host_id": {
          "description": "Host id",
          "type": "string",
          "format": "uuid"
        },
        "infra_env_id": {
          "description": "Infra env id",
          "type": "string",
          "format": "uuid"
        },
        "installer_args": {
          "description": "Core-os installer addtional args",
          "type": "string"
        },
        "installer_image": {
          "description": "Assisted installer image",
          "type": "string",
          "pattern": "^(([a-zA-Z0-9\\-\\.]+)(:[0-9]+)?\\/)?[a-z0-9\\._\\-\\/@]+[?::a-zA-Z0-9_\\-.]+$"
        },
        "mco_image": {
          "description": "Machine config operator image",
          "type": "string",
          "pattern": "^(([a-zA-Z0-9\\-\\.]+)(:[0-9]+)?\\/)?[a-z0-9\\._\\-\\/@]+[?::a-zA-Z0-9_\\-.]+$"
        },
        "must_gather_image": {
          "description": "Must-gather images to use",
          "type": "string"
        },
        "notify_num_reboots": {
          "description": "If true, notify number of reboots by assisted controller",
          "type": "boolean"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string"
        },
        "proxy": {
          "$ref": "#/definitions/proxy"
        },
        "role": {
          "$ref": "#/definitions/host-role"
        },
        "service_ips": {
          "description": "List of service ips",
          "type": "array",
          "items": {
            "description": "Service ip.",
            "type": "string",
            "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3})|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,}))$"
          }
        },
        "skip_installation_disk_cleanup": {
          "description": "Skip formatting installation disk",
          "type": "boolean"
        }
      }
    },
    "installer-args-params": {
      "type": "object",
      "properties": {
        "args": {
          "description": "List of additional arguments passed to coreos-installer",
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "--append-karg",
            "ip=192.0.2.2::192.0.2.254:255.255.255.0:core0.example.com:enp1s0:none",
            "--save-partindex",
            "1",
            "-n"
          ]
        }
      }
    },
    "interface": {
      "type": "object",
      "properties": {
        "biosdevname": {
          "type": "string"
        },
        "client_id": {
          "type": "string"
        },
        "flags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "has_carrier": {
          "type": "boolean"
        },
        "ipv4_addresses": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ipv6_addresses": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mac_address": {
          "type": "string"
        },
        "mtu": {
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "product": {
          "type": "string"
        },
        "speed_mbps": {
          "type": "integer"
        },
        "type": {
          "type": "string"
        },
        "vendor": {
          "type": "string"
        }
      }
    },
    "inventory": {
      "type": "object",
      "properties": {
        "bmc_address": {
          "type": "string"
        },
        "bmc_v6address": {
          "type": "string"
        },
        "boot": {
          "$ref": "#/definitions/boot"
        },
        "cpu": {
          "$ref": "#/definitions/cpu"
        },
        "disks": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/disk"
          }
        },
        "gpus": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/gpu"
          }
        },
        "hostname": {
          "type": "string"
        },
        "interfaces": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/interface"
          }
        },
        "memory": {
          "$ref": "#/definitions/memory"
        },
        "routes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/route"
          }
        },
        "system_vendor": {
          "$ref": "#/definitions/system_vendor"
        },
        "tpm_version": {
          "type": "string",
          "enum": [
            "none",
            "1.2",
            "2.0"
          ]
        }
      }
    },
    "io_perf": {
      "type": "object",
      "properties": {
        "sync_duration": {
          "description": "99th percentile of fsync duration in milliseconds",
          "type": "integer"
        }
      }
    },
    "ip": {
      "type": "string",
      "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3})|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,}))?$",
      "x-go-custom-tag": "gorm:\"primaryKey\""
    },
    "iscsi": {
      "type": "object",
      "properties": {
        "host_ip_address": {
          "description": "Host IP address used to reach iSCSI target",
          "type": "string"
        }
      }
    },
    "kernel_argument": {
      "description": "pair of [operation, argument] specifying the argument and what operation should be applied on it.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "The operation to apply on the kernel argument.",
          "type": "string",
          "enum": [
            "append",
            "replace",
            "delete"
          ]
        },
        "value": {
          "description": "Kernel argument can have the form \u003cparameter\u003e or \u003cparameter\u003e=\u003cvalue\u003e. The following examples should\nbe supported:\nrd.net.timeout.carrier=60\nisolcpus=1,2,10-20,100-2000:2/25\nquiet\nThe parsing by the command line parser in linux kernel is much looser and this pattern follows it.\n",
          "type": "string",
          "pattern": "^(?:(?:[^ \\t\\n\\r\"]+)|(?:\"[^\"]*\"))+$"
        }
      }
    },
    "kernel_arguments": {
      "description": "List of kernel arugment objects that define the operations and values to be applied.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/kernel_argument"
      },
      "x-omitempty": false
    },
    "l2-connectivity": {
      "type": "object",
      "properties": {
        "outgoing_ip_address": {
          "type": "string"
        },
        "outgoing_nic": {
          "type": "string"
        },
        "remote_ip_address": {
          "type": "string"
        },
        "remote_mac": {
          "type": "string"
        },
        "successful": {
          "type": "boolean"
        }
      }
    },
    "l3-connectivity": {
      "type": "object",
      "properties": {
        "average_rtt_ms": {
          "description": "Average round trip time in milliseconds.",
          "type": "number",
          "format": "double",
          "x-go-name": "AverageRTTMs"
        },
        "outgoing_nic": {
          "type": "string"
        },
        "packet_loss_percentage": {
          "description": "Percentage of packets lost during connectivity check.",
          "type": "number",
          "format": "double"
        },
        "remote_ip_address": {
          "type": "string"
        },
        "successful": {
          "type": "boolean"
        }
      }
    },
    "last-installation-preparation": {
      "description": "Gives the status of the last installation preparation (if any)",
      "type": "object",
      "properties": {
        "reason": {
          "description": "The reason for the preparation status if applicable",
          "type": "string"
        },
        "status": {
          "description": "The last installation preparation status",
          "type": "string",
          "default": "not_started",
          "enum": [
            "not_started",
            "failed",
            "success"
          ],
          "x-nullable": false
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:last_installation_preparation_\"",
      "x-nullable": false
    },
    "list-managed-domains": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/managed-domain"
      }
    },
    "list-manifests": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/manifest"
      }
    },
    "list-versions": {
      "type": "object",
      "properties": {
        "release_tag": {
          "type": "string"
        },
        "versions": {
          "$ref": "#/definitions/versions"
        }
      }
    },
    "load_balancer": {
      "type": "object",
      "properties": {
        "type": {
          "description": "Indicates if the load balancer will be managed by the cluster or by the user. This is optional and The\ndefault is `cluster-managed`.\n\n`cluster-managed` means that the cluster will start the components that assign the API and ingress VIPs to the\nnodes of the cluster automatically.\n\n`user-managed` means that the user is responsible for configuring an external load balancer and assign the\nAPI and ingress VIPs to it. Note that this configuration needs to be completed before starting the\ninstallation of the cluster, as it is needed during the installation process.\n",
          "type": "string",
          "enum": [
            "cluster-managed",
            "user-managed"
          ],
          "x-go-custom-tag": "gorm:\"not null;check:load_balancer_type in ('cluster-managed', 'user-managed');default:'cluster-managed'\""
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:load_balancer_\""
    },
    "logs-progress-params": {
      "type": "object",
      "required": [
        "logs_state"
      ],
      "properties": {
        "logs_state": {
          "description": "The state of collecting logs.",
          "$ref": "#/definitions/logs_state"
        }
      }
    },
    "logs_gather_cmd_request": {
      "type": "object",
      "required": [
        "cluster_id",
        "infra_env_id",
        "host_id",
        "bootstrap",
        "installer_gather"
      ],
      "properties": {
        "bootstrap": {
          "description": "Host is bootstrap or not",
          "type": "boolean"
        },
        "cluster_id": {
          "description": "Cluster id",
          "type": "string",
          "format": "uuid"
        },
        "host_id": {
          "description": "Host id",
          "type": "string",
          "format": "uuid"
        },
        "infra_env_id": {
          "description": "Infra env id",
          "type": "string",
          "format": "uuid"
        },
        "installer_gather": {
          "description": "Run installer gather logs",
          "type": "boolean",
          "default": true
        },
        "master_ips": {
          "description": "List of master ips",
          "type": "array",
          "items": {
            "description": "Master ip.",
            "type": "string",
            "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3})|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,}))$"
          }
        }
      }
    },
    "logs_state": {
      "type": "string",
      "enum": [
        "requested",
        "collecting",
        "completed",
        "timeout",
        ""
      ],
      "x-go-custom-tag": "gorm:\"type:varchar(2048)\""
    },
    "logs_type": {
      "type": "string",
      "enum": [
        "host",
        "controller",
        "all",
        ""
      ]
    },
    "mac_interface_map": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "logical_nic_name": {
            "description": "nic name used in the yaml, which relates 1:1 to the mac address",
            "type": "string"
          },
          "mac_address": {
            "description": "mac address present on the host",
            "type": "string",
            "pattern": "^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$"
          }
        }
      }
    },
    "machine_network": {
      "description": "A network that all hosts belonging to the cluster should have an interface with IP address in. The VIPs (if exist) belong to this network.",
      "type": "object",
      "properties": {
        "cidr": {
          "description": "The IP block address pool.",
          "$ref": "#/definitions/subnet"
        },
        "cluster_id": {
          "description": "The cluster that this network is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        }
      }
    },
    "managed-domain": {
      "type": "object",
      "properties": {
        "domain": {
          "type": "string"
        },
        "provider": {
          "type": "string",
          "enum": [
            "route53"
          ]
        }
      }
    },
    "manifest": {
      "type": "object",
      "properties": {
        "file_name": {
          "description": "The file name prefaced by the folder that contains it.",
          "type": "string"
        },
        "folder": {
          "description": "The folder that contains the files. Manifests can be placed in 'manifests' or 'openshift' directories.",
          "type": "string",
          "enum": [
            "manifests",
            "openshift"
          ]
        },
        "manifest_source": {
          "description": "Describes whether manifest is sourced from a user or created by the system.",
          "type": "string",
          "enum": [
            "user",
            "system"
          ]
        }
      }
    },
    "memory": {
      "type": "object",
      "properties": {
        "physical_bytes": {
          "type": "integer"
        },
        "physical_bytes_method": {
          "description": "The method by which the physical memory was set",
          "$ref": "#/definitions/memory_method"
        },
        "usable_bytes": {
          "type": "integer"
        }
      }
    },
    "memory_method": {
      "type": "string",
      "enum": [
        "dmidecode",
        "ghw",
        "meminfo"
      ]
    },
    "monitored-operator": {
      "type": "object",
      "properties": {
        "bundles": {
          "description": "List of identifier of the bundles associated with the operator. Can be empty.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-custom-tag": "gorm:\"type:text[]\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "github.com/lib/pq"
            },
            "type": "StringArray"
          }
        },
        "cluster_id": {
          "description": "The cluster that this operator is associated with.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "dependency_only": {
          "description": "Whether the operator can't be installed without being required by another operator.",
          "type": "boolean"
        },
        "name": {
          "description": "Unique name of the operator.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        },
        "namespace": {
          "description": "Namespace where to deploy an operator. Only some operators require a namespace.",
          "type": "string"
        },
        "operator_type": {
          "$ref": "#/definitions/operator-type"
        },
        "properties": {
          "description": "Blob of operator-dependent parameters that are required for installation.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        },
        "status": {
          "$ref": "#/definitions/operator-status"
        },
        "status_info": {
          "description": "Detailed information about the operator state.",
          "type": "string"
        },
        "status_updated_at": {
          "description": "Time at which the operator was last updated.",
          "type": "string",
          "format": "date-time",
          "x-go-custom-tag": "gorm:\"type:timestamp with time zone\""
        },
        "subscription_name": {
          "description": "The name of the subscription of the operator.",
          "type": "string"
        },
        "timeout_seconds": {
          "description": "Positive number represents a timeout in seconds for the operator to be available.",
          "type": "integer"
        },
        "version": {
          "description": "Operator version",
          "type": "string"
        }
      }
    },
    "monitored-operators-list": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/monitored-operator"
      }
    },
    "mtu-report": {
      "type": "object",
      "properties": {
        "mtu_successful": {
          "type": "boolean"
        },
        "outgoing_nic": {
          "type": "string"
        },
        "remote_ip_address": {
          "type": "string"
        }
      }
    },
    "next_step_cmd_request": {
      "type": "object",
      "required": [
        "infra_env_id",
        "host_id",
        "agent_version"
      ],
      "properties": {
        "agent_version": {
          "description": "Agent image version",
          "type": "string",
          "pattern": "^(([a-zA-Z0-9\\-\\.]+)(:[0-9]+)?\\/)?[a-z0-9\\._\\-\\/@]+[?::a-zA-Z0-9_\\-.]+$"
        },
        "host_id": {
          "description": "Host id",
          "type": "string",
          "format": "uuid"
        },
        "infra_env_id": {
          "description": "Infra env id",
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "node-label-params": {
      "type": "object",
      "required": [
        "key",
        "value"
      ],
      "properties": {
        "key": {
          "description": "The key for the label's key-value pair.",
          "type": "string"
        },
        "value": {
          "description": "The value for the label's key-value pair.",
          "type": "string"
        }
      }
    },
    "ntp_source": {
      "type": "object",
      "properties": {
        "source_name": {
          "description": "NTP source name or IP.",
          "type": "string"
        },
        "source_state": {
          "description": "Indication of state of an NTP source.",
          "$ref": "#/definitions/source_state"
        }
      }
    },
    "ntp_synchronization_request": {
      "type": "object",
      "required": [
        "ntp_source"
      ],
      "properties": {
        "ntp_source": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string"
        }
      }
    },
    "ntp_synchronization_response": {
      "properties": {
        "ntp_sources": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ntp_source"
          }
        }
      }
    },
    "openshift-version": {
      "type": "object",
      "required": [
        "display_name",
        "support_level",
        "cpu_architectures"
      ],
      "properties": {
        "cpu_architectures": {
          "description": "Available CPU architectures.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "default": {
          "description": "Indication that the version is the recommended one.",
          "type": "boolean"
        },
        "display_name": {
          "description": "Name of the version to be presented to the user.",
          "type": "string"
        },
        "support_level": {
          "description": "Level of support of the version.",
          "type": "string",
          "enum": [
            "beta",
            "production",
            "maintenance",
            "end-of-life"
          ]
        }
      }
    },
    "openshift-versions": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/openshift-version"
      }
    },
    "operator-create-params": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "properties": {
          "description": "Blob of operator-dependent parameters that are required for installation.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"type:text\""
        }
      }
    },
    "operator-hardware-requirements": {
      "type": "object",
      "properties": {
        "dependencies": {
          "description": "List of other operator unique names that are required to be installed. Corresponds to name property of the monitored-operator, i.e. \"lso\", \"cnv\", etc.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "operator_name": {
          "description": "Unique name of the operator. Corresponds to name property of the monitored-operator, i.e. \"lso\", \"cnv\", etc.",
          "type": "string"
        },
        "requirements": {
          "$ref": "#/definitions/host-type-hardware-requirements-wrapper"
        }
      }
    },
    "operator-host-requirements": {
      "type": "object",
      "properties": {
        "operator_name": {
          "description": "Name of the operator",
          "type": "string"
        },
        "requirements": {
          "description": "Host requirements for the operator",
          "$ref": "#/definitions/cluster-host-requirements-details"
        }
      }
    },
    "operator-monitor-report": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique name of the operator.",
          "type": "string"
        },
        "status": {
          "$ref": "#/definitions/operator-status"
        },
        "status_info": {
          "description": "Detailed information about the operator state.",
          "type": "string"
        },
        "version": {
          "description": "operator version.",
          "type": "string"
        }
      }
    },
    "operator-properties": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/operator-property"
      }
    },
    "operator-property": {
      "type": "object",
      "properties": {
        "data_type": {
          "description": "Type of the property",
          "type": "string",
          "enum": [
            "boolean",
            "string",
            "integer",
            "float"
          ]
        },
        "default_value": {
          "description": "Default value for the property",
          "type": "string"
        },
        "description": {
          "description": "Description of a property",
          "type": "string"
        },
        "mandatory": {
          "description": "Indicates whether the property is reqired",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the property",
          "type": "string"
        },
        "options": {
          "description": "Values to select from",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "operator-status": {
      "description": "Represents the operator state.",
      "type": "string",
      "enum": [
        "failed",
        "progressing",
        "available"
      ]
    },
    "operator-type": {
      "description": "Kind of operator. Different types are monitored by the service differently.",
      "type": "string",
      "enum": [
        "builtin",
        "olm"
      ]
    },
    "os-image": {
      "type": "object",
      "required": [
        "openshift_version",
        "cpu_architecture",
        "url",
        "version"
      ],
      "properties": {
        "cpu_architecture": {
          "description": "The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x"
          ],
          "x-go-custom-tag": "gorm:\"default:'x86_64'\""
        },
        "openshift_version": {
          "description": "Version of the operating system image",
          "type": "string",
          "example": "4.12"
        },
        "url": {
          "description": "The base OS image used for the discovery iso.",
          "type": "string"
        },
        "version": {
          "description": "Build ID of the OS image.",
          "type": "string"
        }
      }
    },
    "os-images": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/os-image"
      }
    },
    "platform": {
      "description": "The configuration for the specific platform upon which to perform the installation.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "external": {
          "x-nullable": true,
          "$ref": "#/definitions/platform_external"
        },
        "type": {
          "$ref": "#/definitions/platform_type"
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:platform_\""
    },
    "platform_external": {
      "description": "Configuration used when installing with an external platform type.",
      "type": "object",
      "properties": {
        "cloud_controller_manager": {
          "description": "When set to external, this property will enable an external cloud provider.",
          "type": "string",
          "default": "",
          "enum": [
            "",
            "External"
          ],
          "x-nullable": true
        },
        "platform_name": {
          "description": "Holds the arbitrary string representing the infrastructure provider name.",
          "type": "string",
          "minLength": 1,
          "x-nullable": true
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:external_\""
    },
    "platform_type": {
      "type": "string",
      "enum": [
        "baremetal",
        "nutanix",
        "vsphere",
        "none",
        "external"
      ]
    },
    "preflight-hardware-requirements": {
      "type": "object",
      "properties": {
        "ocp": {
          "description": "Preflight OCP requirements",
          "$ref": "#/definitions/host-type-hardware-requirements-wrapper"
        },
        "operators": {
          "description": "Preflight operators hardware requirements",
          "type": "array",
          "items": {
            "$ref": "#/definitions/operator-hardware-requirements"
          }
        }
      }
    },
    "presigned-url": {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "expires_at": {
          "description": "Expiration time for the URL token.",
          "type": "string",
          "format": "date-time"
        },
        "url": {
          "description": "Pre-signed URL for downloading the infra-env discovery image.",
          "type": "string"
        }
      }
    },
    "proxy": {
      "type": "object",
      "properties": {
        "http_proxy": {
          "description": "A proxy URL to use for creating HTTP connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-nullable": true
        },
        "https_proxy": {
          "description": "A proxy URL to use for creating HTTPS connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-go-custom-tag": "gorm:\"column:https_proxy\"",
          "x-nullable": true
        },
        "no_proxy": {
          "description": "An \"*\" or a comma-separated list of destination domain names, domains, IP addresses, or other network CIDRs to exclude from proxying.",
          "type": "string",
          "x-nullable": true
        }
      },
      "x-go-custom-tag": "gorm:\"embedded;embeddedPrefix:proxy_\""
    },
    "reboot_for_reclaim_request": {
      "description": "Information sent to the agent for rebooting a host into discovery.",
      "type": "object",
      "required": [
        "host_fs_mount_dir"
      ],
      "properties": {
        "host_fs_mount_dir": {
          "description": "The base directory on the host that contains the /boot folder. The host needs to\nchroot into this directory in order to properly reboot.",
          "type": "string"
        }
      }
    },
    "release-channel": {
      "description": "Release channel.",
      "type": "string",
      "enum": [
        "candidate",
        "fast",
        "stable",
        "eus"
      ]
    },
    "release-image": {
      "type": "object",
      "required": [
        "openshift_version",
        "cpu_architecture",
        "url",
        "version"
      ],
      "properties": {
        "cpu_architecture": {
          "description": "(DEPRECATED) The CPU architecture of the image (x86_64/arm64/etc).",
          "type": "string",
          "default": "x86_64",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x",
            "multi"
          ],
          "x-go-custom-tag": "gorm:\"default:'x86_64'\""
        },
        "cpu_architectures": {
          "description": "List of CPU architectures provided by the image.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-custom-tag": "gorm:\"type:text[]\"",
          "x-go-type": {
            "hints": {
              "noValidation": true
            },
            "import": {
              "package": "github.com/lib/pq"
            },
            "type": "StringArray"
          }
        },
        "default": {
          "description": "Indication that the version is the recommended one.",
          "type": "boolean"
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string"
        },
        "support_level": {
          "description": "Level of support of the version.",
          "type": "string",
          "enum": [
            "beta",
            "production",
            "maintenance",
            "end-of-life"
          ]
        },
        "url": {
          "description": "The installation image of the OpenShift cluster.",
          "type": "string",
          "x-go-custom-tag": "gorm:\"primarykey\""
        },
        "version": {
          "description": "OCP version from the release metadata.",
          "type": "string"
        }
      }
    },
    "release-images": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/release-image"
      }
    },
    "release-source": {
      "type": "object",
      "required": [
        "openshift_version",
        "multi_cpu_architectures",
        "upgrade_channels"
      ],
      "properties": {
        "multi_cpu_architectures": {
          "type": "array",
          "items": {
            "description": "Supported CPU architecture for multi-architecture releases in this OpenShift version..",
            "type": "string",
            "enum": [
              "x86_64",
              "aarch64",
              "arm64",
              "ppc64le",
              "s390x"
            ]
          }
        },
        "openshift_version": {
          "description": "Version of the OpenShift cluster.",
          "type": "string",
          "example": "4.14"
        },
        "upgrade_channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/upgrade-channel"
          }
        }
      }
    },
    "release-sources": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/release-source"
      }
    },
    "route": {
      "type": "object",
      "properties": {
        "destination": {
          "description": "The destination network or destination host",
          "type": "string"
        },
        "family": {
          "description": "Defines whether this is an IPv4 (4) or IPv6 route (6)",
          "type": "integer",
          "format": "int32"
        },
        "gateway": {
          "description": "Gateway address where the packets are sent",
          "type": "string"
        },
        "interface": {
          "description": "Interface to which packets for this route will be sent",
          "type": "string"
        },
        "metric": {
          "description": "Route priority metric",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "secure-boot-state": {
      "type": "string",
      "enum": [
        "Unknown",
        "NotSupported",
        "Enabled",
        "Disabled"
      ]
    },
    "service_network": {
      "description": "IP address block for service IP blocks.",
      "type": "object",
      "properties": {
        "cidr": {
          "description": "The IP block address pool.",
          "$ref": "#/definitions/subnet"
        },
        "cluster_id": {
          "description": "A network to use for service IP addresses. If you need to access the services from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "format": "uuid",
          "x-go-custom-tag": "gorm:\"primaryKey\""
        }
      }
    },
    "source_state": {
      "type": "string",
      "enum": [
        "synced",
        "combined",
        "not_combined",
        "error",
        "variable",
        "unreachable"
      ]
    },
    "step": {
      "type": "object",
      "properties": {
        "args": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "step_id": {
          "type": "string"
        },
        "step_type": {
          "$ref": "#/definitions/step-type"
        }
      }
    },
    "step-reply": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string"
        },
        "exit_code": {
          "type": "integer"
        },
        "output": {
          "type": "string"
        },
        "step_id": {
          "type": "string"
        },
        "step_type": {
          "$ref": "#/definitions/step-type"
        }
      }
    },
    "step-type": {
      "type": "string",
      "enum": [
        "connectivity-check",
        "execute",
        "inventory",
        "install",
        "free-network-addresses",
        "dhcp-lease-allocate",
        "api-vip-connectivity-check",
        "tang-connectivity-check",
        "ntp-synchronizer",
        "installation-disk-speed-check",
        "container-image-availability",
        "domain-resolution",
        "stop-installation",
        "logs-gather",
        "next-step-runner",
        "upgrade-agent",
        "download-boot-artifacts",
        "reboot-for-reclaim",
        "verify-vips"
      ]
    },
    "steps": {
      "type": "object",
      "properties": {
        "instructions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/step"
          }
        },
        "next_instruction_seconds": {
          "type": "integer"
        },
        "post_step_action": {
          "description": "What to do after finishing to run step instructions",
          "type": "string",
          "default": "continue",
          "enum": [
            "exit",
            "continue"
          ]
        }
      }
    },
    "steps-reply": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/step-reply"
      }
    },
    "subnet": {
      "type": "string",
      "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$",
      "x-go-custom-tag": "gorm:\"primaryKey\""
    },
    "support-level": {
      "type": "string",
      "enum": [
        "supported",
        "unsupported",
        "tech-preview",
        "dev-preview",
        "unavailable"
      ]
    },
    "support-levels": {
      "description": "Map of feature ID or CPU architecture alongside their support level",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/support-level"
      }
    },
    "system_vendor": {
      "type": "object",
      "properties": {
        "manufacturer": {
          "type": "string"
        },
        "product_name": {
          "type": "string"
        },
        "serial_number": {
          "type": "string"
        },
        "virtual": {
          "description": "Whether the machine appears to be a virtual machine or not",
          "type": "boolean"
        }
      }
    },
    "tang_connectivity_request": {
      "type": "object",
      "required": [
        "tang_servers"
      ],
      "properties": {
        "tang_servers": {
          "description": "JSON-formatted string containing additional information regarding tang's configuration",
          "type": "string"
        }
      }
    },
    "tang_connectivity_response": {
      "type": "object",
      "properties": {
        "is_success": {
          "description": "Tang check result.",
          "type": "boolean"
        },
        "tang_server_response": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "payload": {
                "description": "Tang response payload.",
                "type": "string"
              },
              "signatures": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "protected": {
                      "type": "string"
                    },
                    "signature": {
                      "type": "string"
                    }
                  },
                  "x-go-name": "TangServerSignatures"
                }
              },
              "tang_url": {
                "description": "Tang URL.",
                "type": "string"
              }
            },
            "x-go-name": "TangServerResponse"
          }
        }
      }
    },
    "update-manifest-params": {
      "type": "object",
      "required": [
        "folder",
        "file_name"
      ],
      "properties": {
        "file_name": {
          "description": "The file name for the manifest to modify.",
          "type": "string",
          "pattern": "^[^\\/]*\\.(json|ya?ml(\\.patch_?[a-zA-Z0-9_]*)?)$",
          "x-nullable": false
        },
        "folder": {
          "description": "The folder for the manifest to modify.",
          "type": "string",
          "default": "manifests",
          "enum": [
            "manifests",
            "openshift"
          ],
          "x-nullable": false
        },
        "updated_content": {
          "description": "The new base64 encoded manifest content.",
          "type": "string",
          "x-nullable": true
        },
        "updated_file_name": {
          "description": "The new file name for the manifest.",
          "type": "string",
          "pattern": "^[^\\/]*\\.(json|ya?ml(\\.patch_?[a-zA-Z0-9_]*)?)$",
          "x-nullable": true
        },
        "updated_folder": {
          "description": "The new folder for the manifest. Manifests can be placed in 'manifests' or 'openshift' directories.",
          "type": "string",
          "default": "manifests",
          "enum": [
            "manifests",
            "openshift"
          ],
          "x-nullable": true
        }
      }
    },
    "upgrade-channel": {
      "type": "object",
      "required": [
        "cpu_architecture",
        "channels"
      ],
      "properties": {
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/release-channel"
          }
        },
        "cpu_architecture": {
          "description": "The CPU architecture of the image.",
          "type": "string",
          "enum": [
            "x86_64",
            "aarch64",
            "arm64",
            "ppc64le",
            "s390x",
            "multi"
          ]
        }
      }
    },
    "upgrade_agent_request": {
      "type": "object",
      "properties": {
        "agent_image": {
          "description": "Full image reference of the image that the agent should upgrade to, for example\n`quay.io/registry-proxy.engineering.redhat.com/rh-osbs/openshift4-assisted-installer-agent-rhel8:v1.0.0-142`.\n",
          "type": "string"
        }
      }
    },
    "upgrade_agent_response": {
      "type": "object",
      "properties": {
        "agent_image": {
          "description": "Full image reference of the image that the agent has upgraded to, for example\n`quay.io/registry-proxy.engineering.redhat.com/rh-osbs/openshift4-assisted-installer-agent-rhel8:v1.0.0-142`.\n",
          "type": "string"
        },
        "result": {
          "$ref": "#/definitions/upgrade_agent_result"
        }
      }
    },
    "upgrade_agent_result": {
      "description": "Agent upgrade result.",
      "type": "string",
      "enum": [
        "success",
        "failure"
      ]
    },
    "usage": {
      "type": "object",
      "properties": {
        "data": {
          "description": "additional properties of the feature",
          "type": "object",
          "additionalProperties": {
            "type": "object"
          }
        },
        "id": {
          "description": "Unique idenftifier of the feature",
          "type": "string"
        },
        "name": {
          "description": "name of the feature to track",
          "type": "string"
        }
      }
    },
    "v2-cluster-update-params": {
      "type": "object",
      "properties": {
        "additional_ntp_source": {
          "description": "A comma-separated list of NTP sources (name or IP) going to be added to all the hosts.",
          "type": "string",
          "x-nullable": true
        },
        "api_vip_dns_name": {
          "description": "The domain name used to reach the OpenShift cluster API.",
          "type": "string",
          "x-nullable": true
        },
        "api_vips": {
          "description": "The virtual IPs used to reach the OpenShift cluster's API. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/api_vip"
          },
          "x-nullable": true
        },
        "base_dns_domain": {
          "description": "Base domain of the cluster. All DNS records must be sub-domains of this base and include the cluster name.",
          "type": "string",
          "x-nullable": true
        },
        "cluster_network_cidr": {
          "description": "IP address block from which Pod IPs are allocated. This block must not overlap with existing physical networks. These IP addresses are used for the Pod network, and if you need to access the Pods from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$",
          "x-nullable": true
        },
        "cluster_network_host_prefix": {
          "description": "The subnet prefix length to assign to each individual node. For example, if clusterNetworkHostPrefix is set to 23, then each node is assigned a /23 subnet out of the given cidr (clusterNetworkCIDR), which allows for 510 (2^(32 - 23) - 2) pod IPs addresses. If you are required to provide access to nodes from an external network, configure load balancers and routers to manage the traffic.",
          "type": "integer",
          "maximum": 128,
          "minimum": 1,
          "x-nullable": true
        },
        "cluster_networks": {
          "description": "Cluster networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/cluster_network"
          },
          "x-nullable": true
        },
        "control_plane_count": {
          "description": "Specifies the required number of control plane nodes that should be part of the cluster.",
          "type": "integer",
          "x-nullable": true
        },
        "disk_encryption": {
          "description": "Installation disks encryption mode and host roles to be applied.",
          "$ref": "#/definitions/disk-encryption"
        },
        "http_proxy": {
          "description": "A proxy URL to use for creating HTTP connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-nullable": true
        },
        "https_proxy": {
          "description": "A proxy URL to use for creating HTTPS connections outside the cluster.\nhttp://\\\u003cusername\\\u003e:\\\u003cpswd\\\u003e@\\\u003cip\\\u003e:\\\u003cport\\\u003e\n",
          "type": "string",
          "x-nullable": true
        },
        "hyperthreading": {
          "description": "Enable/disable hyperthreading on master nodes, arbiter nodes, worker nodes, or a combination of them.",
          "type": "string",
          "enum": [
            "none",
            "masters",
            "arbiters",
            "workers",
            "masters,arbiters",
            "masters,workers",
            "arbiters,workers",
            "masters,arbiters,workers",
            "all"
          ],
          "x-nullable": true
        },
        "ignition_endpoint": {
          "description": "Explicit ignition endpoint overrides the default ignition endpoint.",
          "$ref": "#/definitions/ignition-endpoint"
        },
        "ingress_vips": {
          "description": "The virtual IPs used for cluster ingress traffic. Enter one IP address for single-stack clusters, or up to two for dual-stack clusters (at most one IP address per IP stack used). The order of stacks should be the same as order of subnets in Cluster Networks, Service Networks, and Machine Networks.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ingress_vip"
          },
          "x-nullable": true
        },
        "load_balancer": {
          "$ref": "#/definitions/load_balancer"
        },
        "machine_network_cidr": {
          "description": "A CIDR that all hosts belonging to the cluster should have an interfaces with IP address that belongs to this CIDR. The api_vip belongs to this CIDR.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$",
          "x-nullable": true
        },
        "machine_networks": {
          "description": "Machine networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/machine_network"
          },
          "x-nullable": true
        },
        "name": {
          "description": "OpenShift cluster name.",
          "type": "string",
          "maxLength": 54,
          "minLength": 1,
          "x-nullable": true
        },
        "network_type": {
          "description": "The desired network type used.",
          "type": "string",
          "enum": [
            "OpenShiftSDN",
            "OVNKubernetes"
          ],
          "x-nullable": true
        },
        "no_proxy": {
          "description": "An \"*\" or a comma-separated list of destination domain names, domains, IP addresses, or other network CIDRs to exclude from proxying.",
          "type": "string",
          "x-nullable": true
        },
        "olm_operators": {
          "description": "List of OLM operators to be installed.\nFor the full list of supported operators, check the endpoint `/v2/supported-operators`:\n",
          "type": "array",
          "items": {
            "$ref": "#/definitions/operator-create-params"
          }
        },
        "platform": {
          "$ref": "#/definitions/platform"
        },
        "pull_secret": {
          "description": "The pull secret obtained from Red Hat OpenShift Cluster Manager at console.redhat.com/openshift/install/pull-secret.",
          "type": "string",
          "x-nullable": true
        },
        "schedulable_masters": {
          "description": "Schedule workloads on masters",
          "type": "boolean",
          "default": false
        },
        "service_network_cidr": {
          "description": "The IP address pool to use for service IP addresses. You can enter only one IP address pool. If you need to access the services from an external network, configure load balancers and routers to manage the traffic.",
          "type": "string",
          "pattern": "^(?:(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/(?:(?:[0-9])|(?:[1-2][0-9])|(?:3[0-2])))|(?:(?:[0-9a-fA-F]*:[0-9a-fA-F]*){2,})/(?:(?:[0-9])|(?:[1-9][0-9])|(?:1[0-1][0-9])|(?:12[0-8])))$",
          "x-nullable": true
        },
        "service_networks": {
          "description": "Service networks that are associated with this cluster.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/service_network"
          },
          "x-nullable": true
        },
        "ssh_public_key": {
          "description": "SSH public key for debugging OpenShift nodes.",
          "type": "string",
          "x-nullable": true
        },
        "tags": {
          "description": "A comma-separated list of tags that are associated to the cluster.",
          "type": "string",
          "x-nullable": true
        },
        "user_managed_networking": {
          "description": "(DEPRECATED) Indicate if the networking is managed by the user.",
          "type": "boolean",
          "x-nullable": true
        },
        "vip_dhcp_allocation": {
          "description": "Indicate if virtual IP DHCP allocation mode is enabled.",
          "type": "boolean",
          "x-nullable": true
        }
      }
    },
    "verified_vip": {
      "description": "Single VIP verification result.",
      "type": "object",
      "properties": {
        "verification": {
          "$ref": "#/definitions/vip_verification"
        },
        "vip": {
          "$ref": "#/definitions/ip"
        },
        "vip_type": {
          "$ref": "#/definitions/vip_type"
        }
      }
    },
    "verify_vip": {
      "description": "Request to verify single vip.",
      "type": "object",
      "properties": {
        "vip": {
          "$ref": "#/definitions/ip"
        },
        "vip_type": {
          "$ref": "#/definitions/vip_type"
        }
      }
    },
    "verify_vips_request": {
      "description": "list of vips to be verified.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/verify_vip"
      }
    },
    "verify_vips_response": {
      "description": "list of verified vips.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/verified_vip"
      }
    },
    "versioned-host-requirements": {
      "type": "object",
      "properties": {
        "edge-worker": {
          "description": "Edge Worker OpenShift node requirements",
          "x-go-name": "EdgeWorkerRequirements",
          "$ref": "#/definitions/cluster-host-requirements-details"
        },
        "master": {
          "description": "Master node requirements",
          "x-go-name": "MasterRequirements",
          "$ref": "#/definitions/cluster-host-requirements-details"
        },
        "sno": {
          "description": "Single node OpenShift node requirements",
          "x-go-name": "SNORequirements",
          "$ref": "#/definitions/cluster-host-requirements-details"
        },
        "version": {
          "description": "Version of the component for which requirements are defined",
          "type": "string"
        },
        "worker": {
          "description": "Worker node requirements",
          "x-go-name": "WorkerRequirements",
          "$ref": "#/definitions/cluster-host-requirements-details"
        }
      }
    },
    "versions": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "vip_type": {
      "description": "The vip type.",
      "type": "string",
      "enum": [
        "api",
        "ingress"
      ]
    },
    "vip_verification": {
      "description": "vip verification result.",
      "type": "string",
      "default": "unverified",
      "enum": [
        "unverified",
        "failed",
        "succeeded"
      ]
    }
  },
  "securityDefinitions": {
    "agentAuth": {
      "type": "apiKey",
      "name": "X-Secret-Key",
      "in": "header"
    },
    "imageAuth": {
      "type": "apiKey",
      "name": "Image-Token",
      "in": "header"
    },
    "imageURLAuth": {
      "type": "apiKey",
      "name": "image_token",
      "in": "query"
    },
    "urlAuth": {
      "type": "apiKey",
      "name": "api_key",
      "in": "query"
    },
    "userAuth": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header"
    },
    "watcherAuth": {
      "type": "apiKey",
      "name": "Watcher-Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "userAuth": [
        "admin",
        "user"
      ]
    }
  ],
  "tags": [
    {
      "description": "Agent-driven installation",
      "name": "Assisted installation"
    },
    {
      "description": "Events related to a cluster installation.",
      "name": "events"
    },
    {
      "description": "General OpenShift cluster installation APIs.",
      "name": "installer"
    },
    {
      "description": "Managed dns domains for a cluster installation.",
      "name": "managed_domains"
    },
    {
      "description": "Manifests for customizing a cluster installation.",
      "name": "manifests"
    },
    {
      "description": "Information regarding supported operators.",
      "name": "operators"
    },
    {
      "description": "Information regarding versions.",
      "name": "versions"
    }
  ]
}