{
  "description": "ProvisioningRequest is a way to express additional capacity\nthat we would like to provision in the cluster. Cluster Autoscaler\ncan use this information in its calculations and signal if the capacity\nis available in the cluster or actively add capacity if needed.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": [
        "string",
        "null"
      ]
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": [
        "string",
        "null"
      ]
    },
    "metadata": {
      "type": [
        "object",
        "null"
      ]
    },
    "spec": {
      "additionalProperties": false,
      "description": "Spec contains specification of the ProvisioningRequest object.\nMore info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\nThe spec is immutable, to make changes to the request users are expected to delete an existing\nand create a new object with the corrected fields.",
      "properties": {
        "parameters": {
          "additionalProperties": {
            "description": "Parameter is limited to 255 characters.",
            "maxLength": 255,
            "type": "string"
          },
          "description": "Parameters contains all other parameters classes may require.\n'atomic-scale-up.kubernetes.io' supports 'ValidUntilSeconds' parameter, which should contain\n a string denoting duration for which we should retry (measured since creation fo the CR).",
          "maxProperties": 100,
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable",
              "rule": "self == oldSelf"
            }
          ]
        },
        "podSets": {
          "description": "PodSets lists groups of pods for which we would like to provision\nresources.",
          "items": {
            "additionalProperties": false,
            "description": "PodSet represents one group of pods for Provisioning Request to provision capacity.",
            "properties": {
              "count": {
                "description": "Count contains the number of pods that will be created with a given\ntemplate.",
                "format": "int32",
                "minimum": 1,
                "type": "integer"
              },
              "podTemplateRef": {
                "additionalProperties": false,
                "description": "PodTemplateRef is a reference to a PodTemplate object that is representing pods\nthat will consume this reservation (must be within the same namespace).\nUsers need to make sure that the  fields relevant to scheduler (e.g. node selector tolerations)\nare consistent between this template and actual pods consuming the Provisioning Request.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names",
                    "maxLength": 253,
                    "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            },
            "required": [
              "count",
              "podTemplateRef"
            ],
            "type": "object"
          },
          "maxItems": 32,
          "minItems": 1,
          "type": "array",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable",
              "rule": "self == oldSelf"
            }
          ]
        },
        "provisioningClassName": {
          "description": "ProvisioningClassName describes the different modes of provisioning the resources.\nCurrently there is no support for 'ProvisioningClass' objects.\nSupported values:\n* check-capacity.kubernetes.io - check if current cluster state can fullfil this request,\n  do not reserve the capacity. Users should provide a reference to a valid PodTemplate object.\n  CA will check if there is enough capacity in cluster to fulfill the request and put\n  the answer in 'CapacityAvailable' condition.\n* atomic-scale-up.kubernetes.io - provision the resources in an atomic manner.\n  Users should provide a reference to a valid PodTemplate object.\n  CA will try to create the VMs in an atomic manner, clean any partially provisioned VMs\n  and re-try the operation in a exponential back-off manner. Users can configure the timeout\n  duration after which the request will fail by 'ValidUntilSeconds' key in 'Parameters'.\n  CA will set 'Failed=true' or 'Provisioned=true' condition according to the outcome.\n* ... - potential other classes that are specific to the cloud providers.\n'kubernetes.io' suffix is reserved for the modes defined in Kubernetes projects.",
          "maxLength": 253,
          "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "Value is immutable",
              "rule": "self == oldSelf"
            }
          ]
        }
      },
      "required": [
        "podSets",
        "provisioningClassName"
      ],
      "type": "object"
    },
    "status": {
      "additionalProperties": false,
      "description": "Status of the ProvisioningRequest. CA constantly reconciles this field.",
      "properties": {
        "conditions": {
          "description": "Conditions represent the observations of a Provisioning Request's\ncurrent state. Those will contain information whether the capacity\nwas found/created or if there were any issues. The condition types\nmay differ between different provisioning classes.",
          "items": {
            "additionalProperties": false,
            "description": "Condition contains details for one aspect of the current state of this API Resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
                "maxLength": 32768,
                "type": "string"
              },
              "observedGeneration": {
                "description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "reason": {
                "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
                "maxLength": 1024,
                "minLength": 1,
                "pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
                "type": "string"
              },
              "status": {
                "description": "status of the condition, one of True, False, Unknown.",
                "enum": [
                  "True",
                  "False",
                  "Unknown"
                ],
                "type": "string"
              },
              "type": {
                "description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
                "maxLength": 316,
                "pattern": "^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ],
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        },
        "provisioningClassDetails": {
          "additionalProperties": {
            "description": "Detail is limited to 32768 characters.",
            "maxLength": 32768,
            "type": "string"
          },
          "description": "ProvisioningClassDetails contains all other values custom provisioning classes may\nwant to pass to end users.",
          "maxProperties": 64,
          "type": [
            "object",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}